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 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.
The Hibernate Profiler presents all of these statistics and logs most effectively.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With