如何知道/记录 Hibernate 2 级缓存是不是用于查询?

Posted

技术标签:

【中文标题】如何知道/记录 Hibernate 2 级缓存是不是用于查询?【英文标题】:How to know/log whether Hibernate 2nd-level cache was used or not for a query?如何知道/记录 Hibernate 2 级缓存是否用于查询? 【发布时间】:2011-01-22 00:02:08 【问题描述】:

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

对于一个简单的信息来说是相当复杂的,不是吗?

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

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

【问题讨论】:

【参考方案1】:

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

hibernate = "off"

并将其替换为:

hibernate.cache = "trace,stdout"

【讨论】:

【参考方案2】:

简短的回答是,启用查询日志记录后,会记录每个查询。

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

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

Hibernate Profiler 最有效地呈现所有这些统计信息和日志。

【讨论】:

以上是关于如何知道/记录 Hibernate 2 级缓存是不是用于查询?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate 2 级数据缓存和集成/验收测试

Hibernate之一级缓存

Hibernate学习之一级缓存

Hibernate 一级缓存源码级

Hibernate 一级缓存源码级

Hibernate 一级缓存源码级