我有一个使用 Hibernate 和 HSQLDB 进行持久性的开源 Java 应用程序。在我所有的玩具测试中,一切都运行得很快,一切都很好。我有一个客户已经连续运行了几个月的软件,他们的数据库在那段时间里有了很大的增长,性能也逐渐下降。我终于想到数据库可能是问题所在。据我从日志语句中可以看出,服务器中的所有计算都发生得很快,所以这与数据库可能有问题的假设是一致的。
我知道如何对程序进行正常的分析,以找出热点在哪里以及什么占用了大量时间。但是我所知道的所有分析器都会监控程序中的执行时间,并且不会为您提供有关调用外部资源的任何帮助。人们使用什么工具来分析使用外部数据库调用的程序以找出优化性能的地方?
稍微盲目搜索一下已经发现了一些热点——我注意到一个调用,我正在枚举特定类的所有对象以找出是否有任何对象。对标准 [.setMaxResults(1)] 的一行更改将调用从半秒更改为几乎瞬时。我还看到我在单个事务中多次从数据库中提出相同问题的地方。我还没有想出如何缓存答案,但我真正想要的是一个工具来帮助我更系统地寻找这些东西。