Tipps Hibernate serisi, hazırda bekletme sorularını yaymak için hızlı ve basit çözümler sunuyor. Bu sefer bunlar kış uykusunu tarafından yürütülen sorular ve nasıl sayılabilecekleri.
Sormak
Bazı uygulamalarım yavaş ve JPQL sorgusundan daha fazlasını tetikliyor gibi görünüyor. Bir hazırda bekletme oturumunda gerçekleştirilen tüm sorguları nasıl sayabilirim?
Çözüm
Hazırda bekletme istatistiksel bileşeni, gerçekleştirilen tüm soruları saymanın en kolay yolunu sunar. Bileşenin aktivasyonundan sonra, Hibernate çeşitli dahili istatistikleri toplar ve bunlara bir kayıt mesajı ve bir API aracılığıyla sağlar. Ancak, bu bilgi uygulamayı frenler ve bu nedenle üretimde kullanılmamalıdır!
Hazırda bekletme istatistiksel bileşeni varsayılan olarak devre dışı bırakılır. Bunları etkinleştirmek için parametre hibernate.generate_statistics AÇIK true ayarlanmış. Bu, aynı ada sahip bir sistem belirlemek veya parametreyi ayarlamak olabilir. persistence.xml-dosya.
<persistence>
<persistence-unit name=”my-persistence-unit”>
<description>Hibernate Tips</description>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name=”hibernate.generate_statistics” value=”true” />
…
</properties>
</persistence-unit>
</persistence>
Hibernate istatistiklere erişmek için iki yol sunar. Her oturumun en önemli bilgilerine sahip bir özet kayıt dosyasına yazabilir veya tüm ayrıntılara istatistiksel API üzerinden erişebilirsiniz.
Aşağıdaki keskin nişancı böyle bir kayıt mesajı gösterir. SQL talimatlarının sayısı ve hazırlık ve yürütme için gereken süre, 4. ve 5. satırlarda gösterilmiştir. Bu bilgilerle, geliştirme sırasında yapılan soru sayısına ilk bakış alırsınız ve bunları beklentilerinizle karşılaştırabilir. Bu nedenle istatistikler her geliştirme sisteminde etkinleştirilmelidir.
16:24:55,318 INFO [org.hibernate.engine.internal.StatisticalLoggingSessionEventListener] – Session Metrics {
25659 nanoseconds spent acquiring 1 JDBC connections;
22394 nanoseconds spent releasing 1 JDBC connections;
1091216 nanoseconds spent preparing 12 JDBC statements;
11118842 nanoseconds spent executing 12 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
16999942 nanoseconds spent executing 1 flushes (flushing a total of 17 entities and 17 collections);
63915 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}
Hazırda Geri Gösterim İpuçları – Kitap
Basit ve karmaşık haritalama tanımları, kayıt, Java 8'in desteği, önbellekte depolama ve statik ve dinamik üretim gibi konularda bunların 70'ten fazla tarifi “İbernament Önerileri: Artı Ortak Karga Sorunlarına 70 Çözüm” kitabımda mevcuttur. Amazon'da cep ve e-kitap ve hibernate-tips.com'da PDF olarak mevcuttur.
Üzerinde SessionFactory Hibernate ayrıca toplanan istatistiklere API'ya dayalı erişim sunar. Bu daha fazla uygulama çabası gerektirse de, çok daha ayrıntılı erişim sunar.
Statistics stats = sessionFactory.getStatistics();
long queryCount = stats.getQueryExecutionCount();
()
Sormak
Bazı uygulamalarım yavaş ve JPQL sorgusundan daha fazlasını tetikliyor gibi görünüyor. Bir hazırda bekletme oturumunda gerçekleştirilen tüm sorguları nasıl sayabilirim?
Çözüm
Hazırda bekletme istatistiksel bileşeni, gerçekleştirilen tüm soruları saymanın en kolay yolunu sunar. Bileşenin aktivasyonundan sonra, Hibernate çeşitli dahili istatistikleri toplar ve bunlara bir kayıt mesajı ve bir API aracılığıyla sağlar. Ancak, bu bilgi uygulamayı frenler ve bu nedenle üretimde kullanılmamalıdır!
Hazırda bekletme istatistiksel bileşeni varsayılan olarak devre dışı bırakılır. Bunları etkinleştirmek için parametre hibernate.generate_statistics AÇIK true ayarlanmış. Bu, aynı ada sahip bir sistem belirlemek veya parametreyi ayarlamak olabilir. persistence.xml-dosya.
<persistence>
<persistence-unit name=”my-persistence-unit”>
<description>Hibernate Tips</description>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name=”hibernate.generate_statistics” value=”true” />
…
</properties>
</persistence-unit>
</persistence>
Hibernate istatistiklere erişmek için iki yol sunar. Her oturumun en önemli bilgilerine sahip bir özet kayıt dosyasına yazabilir veya tüm ayrıntılara istatistiksel API üzerinden erişebilirsiniz.
Aşağıdaki keskin nişancı böyle bir kayıt mesajı gösterir. SQL talimatlarının sayısı ve hazırlık ve yürütme için gereken süre, 4. ve 5. satırlarda gösterilmiştir. Bu bilgilerle, geliştirme sırasında yapılan soru sayısına ilk bakış alırsınız ve bunları beklentilerinizle karşılaştırabilir. Bu nedenle istatistikler her geliştirme sisteminde etkinleştirilmelidir.
16:24:55,318 INFO [org.hibernate.engine.internal.StatisticalLoggingSessionEventListener] – Session Metrics {
25659 nanoseconds spent acquiring 1 JDBC connections;
22394 nanoseconds spent releasing 1 JDBC connections;
1091216 nanoseconds spent preparing 12 JDBC statements;
11118842 nanoseconds spent executing 12 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
16999942 nanoseconds spent executing 1 flushes (flushing a total of 17 entities and 17 collections);
63915 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}
Hazırda Geri Gösterim İpuçları – Kitap
Basit ve karmaşık haritalama tanımları, kayıt, Java 8'in desteği, önbellekte depolama ve statik ve dinamik üretim gibi konularda bunların 70'ten fazla tarifi “İbernament Önerileri: Artı Ortak Karga Sorunlarına 70 Çözüm” kitabımda mevcuttur. Amazon'da cep ve e-kitap ve hibernate-tips.com'da PDF olarak mevcuttur.
Üzerinde SessionFactory Hibernate ayrıca toplanan istatistiklere API'ya dayalı erişim sunar. Bu daha fazla uygulama çabası gerektirse de, çok daha ayrıntılı erişim sunar.
Statistics stats = sessionFactory.getStatistics();
long queryCount = stats.getQueryExecutionCount();
()