开发者

How to know/log whether Hibernate 2nd-level cache was used or not for a query?

Currently, in order to check if the Hibernate 2nd-level cache was used for a Database query, I check my SQL log (through p6spy or logSql=true in Datasource.groovy) to see if the Grais/Hibernate triggered an SQL query. And I assume that if the query was not logged, it might mean that cache was used.

It is pretty complicated for a simple information, isn't it?

So do you know a simple way to get and log the information : "Cache was used vs. DB query was triggered" ?

EDIT: Following 开发者_Go百科Pascal recommendations, I have added this trace 'org.hibernate.cache' to my log4j configuration.


You could activate the org.hibernate.cache category to log all second-level cache activity. To do so (according to the Grails FAQ), edit your Config.groovy file. Find the line with:

hibernate = "off"

and replace it with:

hibernate.cache = "trace,stdout"


The short answer is that when query logging is enabled, each query is logged.

Various statistics are available via SessionFactory.getStatistics() and Session.getStatistics(). Query execution and query cache hit and miss counts are not available on the SessionStatistics.

In a test environment, where you do not have concurrent sessions, you could perform your cacheable query twice and assert that both of SessionStatistics.getQueryCacheHitCount() and SessionStatistics.getQueryExecutionCount() only increased by 1.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜