400k行のテーブルで同じクエリ(いくつかの内部結合を使用したSELECT)を実行すると、Mac OSXではLinuxやWindows7よりも約30倍長くかかります。確かに、ハードウェア構成は異なりますが、違いはありません。そのような大きな違いを保証するのに十分です。Mac OSX10.6を実行しているいくつかのコンピュータでパフォーマンスの問題を再現することができました。奇妙なことに、長いクエリ実行の途中でH2を強制終了し、次回の起動時にH2にデータベースを修復させた後、期待どおりのパフォーマンスが得られました。しかし、これを一貫して再現することはできませんでした。
Mac OS Xで気付いたのは、クエリを送信してから数秒後に、CPUとディスクの両方の使用量がほぼゼロになり、クエリ結果を返す直前に戻るだけであるということでした。
テストコンピュータには、次のバージョンのJavaがインストールされています。
- Mac OS X:Java(TM)SEランタイム環境(ビルド1.6.0_24-b07-334-10M3326)Java HotSpot(TM)64ビットサーバーVM(ビルド19.1-b02-334、混合モード)
- Linux:Java(TM)SEランタイム環境(ビルド1.6.0_20-b02)、Java HotSpot(TM)64ビットサーバーVM(ビルド16.3-b01、混合モード))
- Windows:Java(TM)SEランタイム環境(ビルド1.6.0_24-b07)Java HotSpot(TM)64ビットサーバーVM(ビルド19.1-b02、混合モード)
すべてのコンピューターはH21.1.117を実行していました。このバージョンはかなり古いことは知っていますが、今はそれを使い続けたいと思いますが、この明らかにプラットフォーム固有のパフォーマンスの問題を解決する必要があります。バグレポートをグーグルで検索しましたが、関連するものは見つかりませんでした。