20.6.2. メトリクス
Hibernate は、基本情報から、特定のシナリオのみに該当するような、さらに特化された情報まで、多くのメトリクスを用意しています。すべての使用可能なカウンタは
Statistics インターフェースの API に書かれており、3つの分類があります:
- 一般的な
Sessionの使い方と関係するメトリクス。オープンセッションの数、取得した JDBC 接続など - 全体として、要素、コレクション、クエリ、キャッシュに関連するメトリクス(別名はグローバルメトリクスです)。
- 特定のエンティティ、コレクション、クエリ、キャッシュ領域に関係した詳細のメトリクス。
例として、キャッシュのヒット、ヒットミスや、要素、コレクション、クエリの割合、クエリの実行に必要な平均時間を確認できます。ミリ秒の数値は Java の近似の影響を受けることに注意してください。Hibernate は JVM の精度に制限され、プラットフォームによっては10秒単位でしか正確でないかもしれません。
単純な getter はグローバルメトリクス(すなわち特定のエンティティ、コレクション、キャッシュ領域などに縛られない)にアクセスするために使います。特定のエンティティ、コレクション、キャッシュ領域のメトリクスは、それらの名前や、クエリの HQL、SQL 表現によってアクセスすることが出来ます。さらに詳しい情報は、
Statistics、EntityStatistics、CollectionStatistics、SecondLevelCacheStatistics、QueryStatistics API の javadoc を参照してください。以下のコードは簡単な例です:
Statistics stats = HibernateUtil.sessionFactory.getStatistics();
double queryCacheHitCount = stats.getQueryCacheHitCount();
double queryCacheMissCount = stats.getQueryCacheMissCount();
double queryCacheHitRatio =
queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);
log.info("Query Hit ratio:" + queryCacheHitRatio);
EntityStatistics entityStats =
stats.getEntityStatistics( Cat.class.getName() );
long changes =
entityStats.getInsertCount()
+ entityStats.getUpdateCount()
+ entityStats.getDeleteCount();
log.info(Cat.class.getName() + " changed " + changes + "times" );
すべてのエンティティ、コレクション、クエリ、キャッシュ領域に対して作業を行う場合は、以下のメソッドを利用しそれぞれの名称リストを取得することができます:
getQueries()、getEntityNames()、getCollectionRoleNames()、getSecondLevelCacheRegionNames()