views:

442

answers:

2

Hi,

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.

+2  A: 

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.

Lachlan Roche
+3  A: 

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"
Pascal Thivent