Hazırda Bekletme İpuçları: Sorgu sayısını hızlı ve kolay bir şekilde öğrenin

Portakalkafa

Global Mod
Global Mod
Hazırda Bekletme İpuçları serisi, yaygın Hazırda Bekletme sorularına hızlı ve kolay çözümler sunar. Bu sefer Hibernate’in çalıştırdığı sorgular ve bunların nasıl sayılacağı ile ilgili.


rica etmek


Kullanım durumlarımdan bazıları yavaş ve JPQL çalıştırdığımdan daha fazla sorgu başlatıyor gibi görünüyor. Hazırda bekletme oturumunda çalışan tüm sorguları nasıl sayabilirim?

çözüm


Hibernate’in istatistik bileşeni, yürütülen tüm sorguları saymanın en kolay yolunu sağlar. Bileşen etkinleştirildikten sonra Hibernate, çeşitli dahili istatistikleri toplar ve bunları bir günlük mesajı olarak ve bir API aracılığıyla kullanıma sunar. Ancak bu bilgilerin toplanması uygulamayı yavaşlatır ve bu nedenle üretimde kullanılmamalıdır!

Hibernate’in istatistik bileşeni varsayılan olarak devre dışıdır. Bunları etkinleştirmek için parametre hibernate.generate_statistics üzerinde true ayarlanmış olmak Bu, aynı ada sahip bir sistem özelliği belirtilerek veya dosyada parametre ayarlanarak yapılabilir. kalıcılık.xml-Dosya tamamlandı.

<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>


Hazırda bekletme, istatistiklere erişmek için iki yol sunar. Günlük dosyasına her oturumun en önemli bilgilerini içeren bir özet yazabilir veya tüm ayrıntılara istatistik API üzerinden erişebilirsiniz.


Aşağıdaki kod parçacığı böyle bir günlük mesajını gösterir. SQL deyimlerinin sayısı ve bunları hazırlamak ve yürütmek için gereken süre 4. ve 5. satırlarda gösterilmektedir. Bu bilgilerle, geliştirme sırasında yürütülen sorgu sayısına ilişkin ilk genel bakışı elde edebilir ve bunları beklentilerinizle karşılaştırabilirsiniz. İstatistikler daha sonra her geliştirme sisteminde açılmalıdır.

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 Bekletme İpuçları: Kitap


“Hibernate Tips: 70+ Solutions to Common Hibernate Problems” adlı kitabım, basit ve karmaşık eşleme tanımları, günlüğe kaydetme, Java 8 desteği, önbelleğe alma ve statik sorgular ve dinamikler oluşturma gibi konularda 70’den fazla tarif içeriyor. Amazon’da basılı ve e-kitap biçiminde ve hibernate-tips.com adresinde PDF biçiminde mevcuttur.







Hakkında SessionFactory Hibernate ayrıca toplanan istatistiklere API tabanlı erişim sağlar. Bu, ekstra bir uygulama çabası gerektirse de, aynı zamanda çok daha ayrıntılı erişim sunar.

Statistics stats = sessionFactory.getStatistics();
long queryCount = stats.getQueryExecutionCount();


()





Haberin Sonu
 
Üst