Hello, I'm using an ignite cluster to back an hibernate-based application. I configured L2-cache as explained in https://ignite.apache.org/docs/latest/extensions-and-integrations/hibernate-l2-cache
(config below) I've ran a test reading a 1M-elements cache with a consumer counting elements. It's very slow : more than 5 minutes to run. Session metrics says it was the LC2 puts that takes most time (5 minutes and 3 seconds of a 5:12" operation) INFO [2020-11-05 09:51:15,694] org.hibernate.engine.internal.StatisticalLoggingSessionEventListener: Session Metrics { 33350 nanoseconds spent acquiring 1 JDBC connections; 25370 nanoseconds spent releasing 1 JDBC connections; 571572 nanoseconds spent preparing 1 JDBC statements; 1153110307 nanoseconds spent executing 1 JDBC statements; 0 nanoseconds spent executing 0 JDBC batches; 303191158712 nanoseconds spent performing 1000000 L2C puts; 23593547 nanoseconds spent performing 1 L2C hits; 0 nanoseconds spent performing 0 L2C misses; 370656057 nanoseconds spent executing 1 flushes (flushing a total of 1000001 entities and 2 collections); 4684 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections) } It seems long, event for 1M puts, but ok, let's say the L2C is initialized now, and it will be better next time ? So I ran the query again, but it took 5+ minutes again ... INFO [2020-11-05 09:58:02,538] org.hibernate.engine.internal.StatisticalLoggingSessionEventListener: Session Metrics { 28982 nanoseconds spent acquiring 1 JDBC connections; 25974 nanoseconds spent releasing 1 JDBC connections; 52468 nanoseconds spent preparing 1 JDBC statements; 1145821128 nanoseconds spent executing 1 JDBC statements; 0 nanoseconds spent executing 0 JDBC batches; 303763054228 nanoseconds spent performing 1000000 L2C puts; 1096985 nanoseconds spent performing 1 L2C hits; 0 nanoseconds spent performing 0 L2C misses; 317558122 nanoseconds spent executing 1 flushes (flushing a total of 1000001 entities and 2 collections); 5500 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections) } Why does the L2 cache had to be filled again ? Isn't his purpose was to share it between Sessions ? Actually, disabling it make the test runs in less that 6 seconds. Why is L2C working that way ? Regards, ****** I'm running 2.9.0 from Debian package Hibernate properties : hibernate.cache.use_second_level_cache: true hibernate.generate_statistics: true hibernate.cache.region.factory_class: org.apache.ignite.cache.hibernate.HibernateRegionFactory org.apache.ignite.hibernate.ignite_instance_name: ClusterWA org.apache.ignite.hibernate.default_access_type: READ_ONLY Method code: @GET @Timed @UnitOfWork @Path("/events/speed") public Response getAllEvents(@Auth AuthenticatedUser auth) { AtomicLong id = new AtomicLong(); StopWatch watch = new StopWatch(); watch.start(); evtDao.findAll().forEach(new Consumer<Event>() { @Override public void accept(Event t) { long cur = id.incrementAndGet(); if (cur % 65536 == 0) logger.debug("got element#{}", cur); } }); watch.stop(); return Response.ok().header("X-Count", Long.toString(id.longValue())).entity(new Time(watch)).build(); } Event cache config: <bean class="org.apache.ignite.configuration.CacheConfiguration"> <property name="name" value="EventCache" /> <property name="cacheMode" value="PARTITIONED" /> <property name="atomicityMode" value="TRANSACTIONAL" /> <property name="backups" value="1" /> <property name="readFromBackup" value="true" /> <property name="copyOnRead" value="true" /> <property name="dataRegionName" value="Disk" /> <property name="keyConfiguration"> <list> <bean class="org.apache.ignite.cache.CacheKeyConfiguration"> <constructor-arg value="fr.data.wa.db.ignite.EventKey" /> <constructor-arg value="clientId" /> </bean> </list> </property> <property name="eagerTtl" value="true" /> <property name="queryEntities"> <list> <bean class="org.apache.ignite.cache.QueryEntity"> <property name="keyType" value="fr.data.wa.db.ignite.EventKey" /> <property name="valueType" value="fr.data.wa.db.ignite.Event" /> <property name="tableName" value="Event" /> <property name="keyFields"> <list> <value>clientId</value> <value>eventDate</value> <value>num</value> </list> </property> <property name="fields"> <map> <entry key="clientId" value="java.lang.Long" /> <entry key="eventDate" value="java.sql.Timestamp" /> <entry key="num" value="java.lang.Long" /> <entry key="type" value="java.lang.String" /> <entry key="source" value="java.lang.String" /> <entry key="entity" value="java.lang.String" /> <entry key="entityId" value="java.lang.Long" /> <entry key="data" value="java.lang.String" /> </map> </property> <property name="aliases"> <map> <entry key="eventDate" value="event_date" /> <entry key="clientId" value="client_id" /> <entry key="entityId" value="entity_id" /> </map> </property> <property name="notNullFields"> <list> <value>clientId</value> <value>eventDate</value> <value>num</value> <value>type</value> <value>source</value> </list> </property> <property name="indexes"> <list> <bean class="org.apache.ignite.cache.QueryIndex"> <property name="name" value="event_pk" /> <property name="indexType" value="SORTED" /> <property name="fields"> <map> <entry key="clientId" value="true" /> <entry key="eventDate" value="true" /> <entry key="num" value="true" /> </map> </property> </bean> </list> </property> </bean> </list> </property> </bean> <bean parent="transactional-cache"> <property name="name" value="fr.data.wa.db.hb.Event" /> </bean> Hibernate Event entity : package fr.data.wa.db.hb; @Entity(name = "event") @Table(name = "\"EventCache\".event") @Cacheable @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) public class Event implements java.io.Serializable { private static final long serialVersionUID = -3536013579696669860L; @Id @Column(name = "client_id", insertable = false, updatable = false) private long clientId; @Id @Column(name = "event_date") private Date eventDate; @Id @Column private long num; /* [...] */ } -- Bastien Durel DATA Intégration des données de l'entreprise, Systèmes d'information décisionnels. bastien.du...@data.fr tel : +33 (0) 1 57 19 59 28 fax : +33 (0) 1 57 19 59 73 45 avenue Carnot, 94230 CACHAN France www.data.fr