如何知道/记录查询是否使用了Hibernate二级缓存?

时间:2010-02-28 12:21:23

标签: hibernate logging orm grails second-level-cache

目前,为了检查Hibernate二级缓存是否用于数据库查询,我检查我的SQL日志(通过datasource.groovy中的p6spy或logSql = true)来查看Grais / Hibernate是否触发了SQL查询。我假设如果未记录查询,则可能意味着使用了缓存。

简单的信息非常复杂,不是吗?

那么您是否知道获取和记录信息的简单方法:“使用缓存与触发数据库查询”?

编辑:根据Pascal建议,我已将此trace 'org.hibernate.cache'添加到我的log4j配置中。

2 个答案:

答案 0 :(得分:6)

您可以激活org.hibernate.cache category来记录所有二级缓存活动。要执行此操作(根据Grails FAQ),请编辑Config.groovy文件。找到以下行:

hibernate = "off"

并将其替换为:

hibernate.cache = "trace,stdout"

答案 1 :(得分:5)

简短的回答是,当启用查询日志记录时,将记录每个查询。

可通过SessionFactory.getStatistics()Session.getStatistics()获取各种统计信息。 SessionStatistics上没有查询执行和查询缓存命中和未命中计数。

在没有并发会话的测试环境中,您可以执行两次可缓存查询,并断言SessionStatistics.getQueryCacheHitCount()SessionStatistics.getQueryExecutionCount()都只增加1。

Hibernate Profiler可以最有效地显示所有这些统计信息和日志。