如何知道/记录 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 级缓存是不是用于查询?的主要内容,如果未能解决你的问题,请参考以下文章