2012-08-02 114 views
0

我們使用H2數據庫(持久化)嵌入到我們的應用程序中。h2.db文件不斷增長

即使我們刪除表後,h2.db文件仍在不斷增長。我們嘗試了禁用事務隔離(LOCK_MODE = 0),禁用了查詢日誌(TRACE_LEVE_FILE = 0),禁用了撤消日誌,但沒有任何幫助。

compacting唯一的選擇?壓縮將需要重新啓動數據庫,我們不能這樣做。

回答

1

此問題已得到解決。問題是我們正在使用存儲在servlet context中的連接。此連接從未關閉。我們改變了代碼來自己管理連接,並在表被刪除(並重新打開)後關閉連接。

+0

很高興知道它解決了!如果有人遇到這個問題,我會保留我的回答。 – 2012-08-03 12:51:20

+2

具有相同的問題,但難以應用此解決方案,因爲我使用spring hibernate並且連接由連接池管理。不知道如何解決,它在幾個小時內增長100kb到30mb,沒有插入數據。 – 2015-07-08 16:48:27

2

使用TRACE_LEVE_FILE=0只會影響文件{databaseName}.trace.db,我建議不要使用禁用跟蹤。文件{databaseName}.trace.db包含人類可讀的錯誤消息和警告,通常應該是空的。如果它不是空的,你的應用程序可能會有一個錯誤。

數據庫文件增長最常見的原因是未提交的事務。你提交了所有交易嗎?使用最新版本的H2(1.3.168),消息「事務日誌不能被截斷」被寫入{databaseName}.trace.db文件。但是這需要您不要使用TRACE_LEVE_FILE=0

請注意文件中的空白空間會被重新使用,但數據庫打開時文件不會縮小。

+0

我們所有的交易都承諾。 – singhspk 2012-08-03 12:24:30