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.
精彩评论