Debugging
HSQL DB 變大,全是零
我有一個應用程序,它的 HSQL 數據庫對於某些使用者來說變得非常大,但對於其他使用者來說卻不是。當我收到一個發生此問題的範例時,我發現數據庫幾乎是空的——它幾乎是 16GB 的零,只有幾十兆字節的真實數據。在執行
CHECKPOINT DEFRAG
時,它會縮小到真正的小尺寸。不幸的是,我對這個數據庫引擎不是很熟悉,而且我的線上搜尋幾乎沒有產生有用的資訊。一件有趣的事情是,有一個選項可以在達到一定大小時自動執行碎片整理,我沒有使用過。但是,我希望數據庫重用死行而不是保留它們,並且絕對不會清零,因為這一定會對性能產生不良影響。
為什麼數據庫不斷產生如此多的空白空間,而這些空白空間只是被這里和那裡的數據打斷?我怎樣才能知道發生了什麼?
一種解釋是創建了大量數據行但後來被應用程序刪除的情況。如果這些行恰好始終在記憶體記憶體中,則它們永遠不會寫入磁碟。
已刪除行的空間最多可用於 500 個最近的項目,其餘的被丟棄。
可以不時使用 CHECKPOINT DEFRAG 命令來壓縮具有大量空白空間的數據庫。
數據庫引擎不寫入零。當分配一些文件空間供使用時,文件中的零就在那裡。