在具有400k行的表上运行相同的查询(带有几个INNER JOIN的SELECT)时,在Mac OS X上比在Linux或Windows 7上花费的时间要长近30倍。但是,硬件配置不同,但不足以保证这么大的差异。我能够在运行Mac OS X 10.6的几台计算机上重现性能问题。奇怪的是,在长查询执行过程中杀死H2后,我获得了预期的性能,并让H2在下次启动时修复数据库。但是,我无法一贯地重现这一点。
我在Mac OS X上注意到,在提交查询后几秒钟,CPU和磁盘使用率几乎都降至零,并且只在返回查询结果之前才恢复正常。
测试计算机安装了以下Java版本:
所有计算机都运行H2 1.1.117。虽然我知道这个版本已经很老了,但我现在更愿意坚持使用它,但我需要理清这个明显特定于平台的性能问题。我已经搜索了错误报告,但没有发现任何相关内容。
答案 0 :(得分:1)
这不太可能与操作系统有关。
如果CPU和磁盘使用率均为零,我建议获得完整的线程转储(jps -l
,然后jstack -l <pid>
)以找出进程正在执行的操作。
你运行ANALYZE了吗?在较新版本的H2(1.3.x)上,不再需要这样做。
如果这不是问题,我建议您查看Database Performance Tuning文档。我知道,很多都是通用的,但它可能仍然有用。如果仍然无法解决问题,请参阅Application Profiling并使用您找到的结果更新问题。