2011-03-25 95 views
0

在具有400k行的表上運行相同的查詢(SELECT有幾個INNER JOIN)時,在Mac OS X上花費的時間比在Linux或Windows 7上多花費近30倍。當然,硬件配置不同,但不足以保證有如此大的差異。我能夠在運行Mac OS X 10.6的幾臺計算機上重現性能問題。奇怪的是,在長時間查詢執行期間殺死H2之後,我獲得了預期的性能,並讓H2在下次啓動時修復數據庫。但是,我無法一直重現這一點。爲什麼H2 1.1.117在Mac OS X上性能較差?

我在Mac OS X上注意到的是,在提交查詢後幾秒鐘,CPU和磁盤使用率幾乎爲零,並且只在返回查詢結果之前才返回。
測試計算機有Java的以下版本的安裝:

  • 的Mac OS X:的Java(TM)SE運行時環境(建立1.6.0_24-b07-334-10M3326) 的HotSpot的Java(TM)64 BitTorrent虛擬機(版本19.1-b02-334,混合模式)
  • Linux:Java™SE運行時環境(版本1.6.0_20-b02),Java HotSpot™64位服務器VM(版本16.3-b01 ,混合模式))
  • 的Windows:的Java(TM)SE運行時環境(建立1.6.0_24-B07) 的HotSpot的Java(TM)64位服務器VM(建設19.1 - B02,混合模式)

所有電腦都在運行H2 1.1.117。雖然我知道這個版本比較陳舊,但我現在更願意堅持使用它,但我需要理清這個明顯是平臺特定的性能問題。我搜索了一些錯誤報告,但沒有找到任何相關的信息。

+0

CPU和IO平板但仍然阻塞?聽起來像鎖定或調度問題。 :-( – 2011-03-25 10:08:59

回答

1

這與操作系統無關。

如果CPU和磁盤使用率都爲零,我建議獲得完整的線程轉儲(jps -l,然後jstack -l <pid>)以查明進程正在執行的操作。

您是否運行ANALYZE?在較新版本的H2(1.3.x)中,這種方式不再需要。

如果這不是問題,我建議看看Database Performance Tuning文檔。我知道,很多都是通用的,但它可能仍然有幫助。如果這仍然不能解決問題,請參閱Application Profiling並用您找到的結果更新問題。

+0

感謝提示;已經瀏覽了大部分內容,但會再次看看,我同意操作系統是一個不太可能的原因,但我看不到任何其他差異和性能問題發生在Mac OS X. – 2011-03-25 10:19:36

+0

我更新了我的答案(如何獲得完整線程轉儲) – 2011-03-25 14:56:32