【问题标题】:HQL logging categories/selective hibernate HQL logging?HQL 日志记录类别/选择性休眠 HQL 日志记录?
【发布时间】:2016-04-22 16:02:15
【问题描述】:

所有 HQL没有 HQL 记录对我来说太生硬了。有人知道休眠中的设置/参数,这将允许我为不同的查询优先/分类 HQL 日志记录?

例如,理想情况下,我希望能够在每个查询上设置一个类别或“查询类型”标记,并为我的每个查询类型调节 ../WARN/INFO/DEBUG/.. 日志记录级别。

我可以看到有类似的东西

  • org.hibernate.event.spi.EventType,包含事件,我或许可以根据我自己的设置在某处注册监听器并触发监听器的日志记录。

  • org.hibernate.Interceptor,它定义了为会话中的特定事件调用的方法,我可以为类似的东西重写。

但我无法立即找到与正在运行的查询相对应的任何此类入口点。我可以想象/希望的一种简单方法是在 @NamedQuery 上设置一个注释字段,但我也看不到任何明显的东西..

【问题讨论】:

  • 不,没有办法。你为什么要这样做,我很难想象它会有什么用例?
  • 用例是处理大量数据的客户端系统的日志/性能分析。一些我们满意的查询,在其他情况下我们无法提前知道,因为它们可能是根据用户设置动态生成的,因此调用休眠层时的选择性会很有用。虽然日志记录很好,但我们之前曾抱怨过过多的日志记录 - 这将是减少日志中噪音的一种方法。

标签: hibernate logging


【解决方案1】:

在生产系统中记录这些查询会对性能产生不利影响。

我建议使用数据库的分析工具(例如 Oracle OEM),而不是识别任何代价高昂的查询。也可以直接查询很多数据库中的系统表,识别长时间运行的查询、频繁执行的查询等。

根据您的意愿调整休眠查询可能非常棘手,因此您可能最终希望通过缓存频繁获取的数据或在数据库中使用索引和分区来解决大部分查询性能问题。

【讨论】:

  • 记录会占用一些 CPU 周期,是的(如上所述,这是能够控制记录的另一个原因!),但在这种情况下,绝大多数时间都花在了数据库更新和查询上。 AWR 报告通常很有帮助,但从我们的客户那里获取普通日志通常更容易,因为他们不需要忙碌的 DBA 的参与,我们很少与他们有太多的关系。日志还会给出某些事情的时间,而不是更具统计性的视图,这也很有用。
猜你喜欢
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
相关资源
最近更新 更多