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

fab*_*474 12 orm grails logging hibernate second-level-cache

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

对于简单的信息来说这很复杂,不是吗?

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

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

Lac*_*che 6

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

通过SessionFactory.getStatistics()和提供各种统计数据Session.getStatistics().SessionStatistics上不提供查询执行和查询缓存命中和未命中计数.

在测试环境中,你没有并发会话,你可以进行两次您的缓存查询和断言,双方SessionStatistics.getQueryCacheHitCount()SessionStatistics.getQueryExecutionCount()仅增加了1.

Hibernate的探查最有效地提供所有这些统计数据和日志.


Pas*_*ent 6

您可以激活org.hibernate.cache 类别以记录所有二级缓存活动.为此(根据Grails 常见问题解答),编辑您的Config.groovy文件.找到以下行:

hibernate = "off"
Run Code Online (Sandbox Code Playgroud)

并替换为:

hibernate.cache = "trace,stdout"
Run Code Online (Sandbox Code Playgroud)