2012-03-21 133 views
5

我正在使用H2數據庫在嵌入式模式下的Java應用程序。 我的應用程序消耗150MB的堆內存。使用H2 DB在嵌入式模式下的性能問題與數據庫中的重負載數據庫

問題: 步驟 當我用2MB的數據加載H2數據庫時,數據庫訪問速度快,堆內存大小160mb。

但是當我加載H2數據庫中的數據的30 MB(H2分貝文件大小= 30 MB)。然後從我的應用程序訪問數據庫非常緩慢。原因是我的應用程序堆的大小大大增加到300mb,因此性能下降。我確認使用JConsole。

所以我的理解是,因爲H2數據庫是用java開發,因爲我在嵌入式模式下使用H2數據庫,數據庫H2的堆大小被添加到我的應用程序,它更是打破了應用程序。

的問題是作爲H2數據庫大小成長,我的應用程序的性能下降。

如何解決該問題?

我已經給出了連接,

rurl = "jdbc:h2:file:/" + getDBPath() + dbname + ";CACHE_SIZE=" + (1024 * 1024) + ";PAGE_SIZE=512"; 

增加H2的緩存。

+0

默認情況下,持久嵌入式H2數據庫的高速緩存大小爲16 MB。你使用內存數據庫還是更高的緩存設置?是否確定性能會因爲堆內存使用情況而降低(因爲這種情況非常少見),並確實檢查性能問題的位置(例如jps -l/jstack -l )? – 2012-03-21 18:03:31

+0

您已使用非默認緩存大小和頁面大小 - 未使用默認設置的原因是什麼? – 2012-03-22 05:59:29

+0

您是否找到了解決方案?我遇到了同樣的問題。小型數據庫是好的,如果我將大量數據插入到一個表中,所有查詢開始花費更長時間。 – Gust 2017-01-26 17:32:37

回答

5

在大多數情況下,性能問題實際上並沒有涉及到高速緩存大小或頁面大小。分析性能問題,請參閱H2文檔,特別是:

如果您手動將緩存大小設置爲1024 * 1024,則H2將使用1 GB堆內存。只有當JVM具有多於1 GB的可用物理內存(使用java -Xmx2048m或類似)時,才應使用此設置。否則,我建議使用默認設置(16 MB緩存大小)。

使用較小的頁面大小比默認會降低性能。這取決於硬盤,並可能取決於訪問模式。但是,在使用非默認頁面大小時,沒有規則列表 - 唯一的辦法是嘗試不同的設置。