我需要在我的 Java EE 应用程序中记录 SQL 执行时间(任何进一步的统计数据都是可选的奖励)。
一切都以一种或多或少的标准方式进行设置:应用服务器上的数据源服务于池化的 JDBC 连接。
应用程序使用以下数据库访问组合:
- hibernate 和
- Spring JDBCTemplate
它运行于:
- Glassfish OSE 和
- 甲骨文数据库
我知道:Anything better than P6Spy?然而,从我的角度来看,问题/答案已经过时了。
到目前为止我发现了什么:
- 我可以选择纯 Hibernate 方法 ( hibernate show query execution time )
- 但由于我的情况是混合数据库访问,所以这是不可行的
- 我可以使用一些定制的 JDBC 驱动程序
- p6spy - 然而项目似乎已经死了几年(最后一次提交是 3 年前:http://sourceforge.net/p/p6spy/code/23/tree/trunk/)
- log4jdbc - 但是超过 1 年没有发布,源代码 Activity 似乎有 6 个月没有被触及 ( http://code.google.com/p/log4jdbc/source/list )
- 另外 2 个:log4jdbc-log4j2 和 log4jdbc-remix - 看起来还活着,但我不确定稳定性和广泛使用
非常欢迎根据经验提出建议。
请注意,我对这样的答案很感兴趣:我们正在使用 XYZ,这是我们的经验,而不是我刚才用谷歌搜索并感觉...
最佳答案
如果你想要精确的 SQL 执行时间,那么最好的选择是 sql trace。但是您想将它放在您的 Java EE 应用程序中,因此显然需要一个稍微准确的执行时间。
以下是我建议的内容 [我已经在我的代码中实现了它们]:
如果您只是想将它用于登录目的,那么请准备好适当的 Log4j 调试消息,这些消息将与日志条目一起打印时间。
我为我的应用程序实现了一个 BatchLog 表,用于记录操作的开始和结束时间。因此,在您的情况下,它将是查询的开始和结束时间。现在,如果它只是一个查询,那么触发器可能会在这里有所帮助,否则您可以在运行查询之前和之后更新日志表。或者更好的是一个存储过程,它可以处理整个事情并提供更准确的数据。
关于java - JDBC - SQL 语句执行时间记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18269855/