如何调整hsqldb/hibernate应用程序的性能

Pan*_*rit 5 java profiling hibernate hsqldb

我有一个开源Java应用程序,它使用Hibernate和HSQLDB来实现持久性.在我的所有玩具测试中,事情都很快,一切都很好.我有一个客户连续几个月运行该软件,他们的数据库在那段时间内显着增长,并且性能逐渐下降.我终于想到数据库可能是问题所在.据我在日志语句中可以看出,服务器中的所有计算都很快发生,因此这与DB可能出错的假设是一致的.

我知道如何对程序进行正常的分析,以确定热点的位置以及占用大量时间的内容.但是我所知道的所有分析器都监视程序内的执行时间,并且不会给你任何有关外部资源调用的帮助.人们使用哪些工具来分析使用外部数据库调用的程序,以找出优化性能的位置?

一个小小的盲目搜索已经找到了一些热点 - 我注意到一个电话,我在列举特定类的所有对象,以便找出是否有任何.标准[.setMaxResults(1)]的一行更改将该调用从半秒更改为几乎瞬时.我还看到在单个事务中多次向db询问相同问题的地方.我还没有弄清楚如何缓存答案,但我真正想要的是一个工具来帮助我更系统地寻找这些事情.

raz*_*nha 3

不幸的是,据我所知,没有工具可以做到这一点。

但您可能需要检查一些事项:

  • 您是否使用急切加载而不是延迟加载?根据你的问题描述,看起来你确实没有使用延迟加载......
  • 您是否已打开并正确配置二级缓存?包括查询缓存?Hibernate的缓存机制极其强大且灵活。
  • 您考虑过使用 Hibernate Search 吗?根据您的查询,Apache Lucene 之上的 Hibernate 搜索全文索引可以加快您的查询速度(因为它的索引系统非常强大)