JDBC - SQL语句执行时间记录

时间:2013-08-16 09:14:57

标签: java sql jdbc time

我需要在我的Java EE应用程序中记录SQL执行时间(任何进一步的统计数据都是可选的奖励)。

事情以一种更为标准的方式设置:数据源在应用服务器上提供池化JDBC连接。

应用程序用于DB访问混合:

  • Hibernate和
  • Spring JDBCTemplate

它运行于:

  • Glassfish OSE和
  • Oracle DBS

我知道:Anything better than P6Spy?但是,从我的角度来看,问题/答案已经过时了。

到目前为止我发现了什么:

非常欢迎基于经验的建议。

请注意,我对以下类似的答案很感兴趣:我们正在使用XYZ,这是我们的经验,而不是我刚才用Google搜索并感觉... ...

3 个答案:

答案 0 :(得分:2)

如果你想要准确的SQL执行时间,那么最好的选择是sql trace。但是你想把它放在你的Java EE应用程序中,所以显然需要一些准确的执行时间。

以下是我建议的内容[我在我的代码中实现了它们]:

  1. 如果您只想将其用于登录目的,那么请使用适当的Log4j调试消息,这些消息将打印时间和日志条目。

  2. 我为我的应用程序实现了一个BatchLog表,用于记录操作的开始和结束时间。因此,在您的情况下,它将是您的查询的开始和结束时间。现在,如果它只是一个查询,那么可能触发器可能在这里有所帮助,否则您可以在运行查询之前和之后更新日志表。或者甚至更好的是一个存储过程,它可以处理整个事情并提供更准确的数据。

答案 1 :(得分:1)

测量时间并记录它似乎是AOP的工作。如果您使用EJB,一个简单的拦截器应该可以解决您的问题(例如http://www.javacodegeeks.com/2013/07/java-ee-ejb-interceptors-tutorial-and-example.html)。如果是Spring(从JDBCTemplate判断),请尝试Aspectj。

答案 2 :(得分:0)

好的,非常感谢您的回答。 最后,我决定使用特定于我们场景的补丁来使用P6Spy。

此外,由于我认为P6spy的填补空缺仍然存在,我决定参与其发展(https://github.com/p6spy/p6spy)。您可以随时向{... 3}}报告您的问题或功能请求,以使其符合您的需求。