Java 统计Hibernate中的SQL语句
我对hibernate有一些性能问题,因为它对数据库的访问次数太多了。我正在调查一些获取策略。我想编写一些功能单元测试,以便随着应用程序的发展,我可以看到调用了多少SQL语句 我想知道是否可以计算调用了多少SQL语句。目前,我正在将showsql设置为true,然后计算控制台中的sql。如果可能的话,我想用代码来做这件事。是否可以计算代码中有多少SQL hibernate访问数据库 谢谢 编辑 在@Aleksander Blomskøld回复之后 我的测试用例是Java 统计Hibernate中的SQL语句,java,sql,hibernate,Java,Sql,Hibernate,我对hibernate有一些性能问题,因为它对数据库的访问次数太多了。我正在调查一些获取策略。我想编写一些功能单元测试,以便随着应用程序的发展,我可以看到调用了多少SQL语句 我想知道是否可以计算调用了多少SQL语句。目前,我正在将showsql设置为true,然后计算控制台中的sql。如果可能的话,我想用代码来做这件事。是否可以计算代码中有多少SQL hibernate访问数据库 谢谢 编辑 在@Aleksander Blomskøld回复之后 我的测试用例是 StatisticsServic
StatisticsService statisticsService = new StatisticsService();
Session session = entityManager.unwrap(Session.class);
statisticsService.setSessionFactory(session.getSessionFactory());
statisticsService.setStatisticsEnabled(true);
List<MyType> r= entityManager.createQuery("from MyType", MyType.class).getResultList();
System.out.println(statisticsService.getQueryExecutionCount());
System.out.println(statisticsService.getQueries()[0]);
StatisticsService StatisticsService=新的StatisticsService();
Session Session=entityManager.unwrap(Session.class);
statisticsService.setSessionFactory(session.getSessionFactory());
statisticsService.setStatisticsEnabled(真);
List r=entityManager.createQuery(“来自MyType”,MyType.class).getResultList();
System.out.println(statisticsService.getQueryExecutionCount());
System.out.println(statisticsService.getQueries()[0]);
查询执行计数为1,如果我查看查询,它会说它是“来自MyType”
然而,在日志中的sql语句中,我可以看到有sql语句用于检索MyType及其许多相关类。所以事实上,我想知道由于“fromMyType”调用而影响数据库的所有SQL
我需要的更清楚吗?还是我只是误用了统计服务
谢谢在Hibernate中启用统计并使用统计服务。在配置会话工厂时,请确保将hibernate.generate_statistics=true设置为。然后,您可以通过JMX或编程方式访问统计信息:
//Enable statistics
StatisticsService statisticsService = new StatisticsService();
statisticsService.setSessionFactory(sessionFactory);
statisticsService.setStatisticsEnabled(true);
// Do queries...
//...
///Print out stats:
System.out.println(statisticsService.getQueryExecutionCount());
您可以尝试一些JDBC包装器/代理工具包 这一个看起来很适合您的任务: 功能
- 记录所有SQL语句的执行和迭代时间
- 识别多次执行的语句
- 对所有列出的语句具有可配置深度的堆栈跟踪
- 提供所有连接、SQL语句和结果集的统计信息
- 提供结果集的大小
- 提供用于检索所有统计信息的API
- 列出当前正在执行的所有语句
- 列出所有已执行但尚未关闭的语句
- 如果语句的执行时间超过可配置的阈值,则通知(例如通过跟踪)
- 在连接关闭前通知您是否忘记关闭resultset或语句
- 支持不同的记录器(log4j、java日志、slf等)
- 可由自定义侦听器扩展
但是还有很多方法,比如,等等。与“计算SQL”相比,您的数据库可能有更好的方法在这方面获得启发。我想你的意思是“计数SQL语句”BTW.TURE @ TIETYT它是声明-更新了代码也许你可以考虑NPROF?Hi @ Aleksander,我不确定这是我想要的。我已经更新了问题…差不多了,谢谢