Postgresql
PostgreSQL 沒有釋放空間“UPDATE set column = null”,vacuum 也沒有用
我有一個巨大的表,我無法刪除行,只能更新儲存大量 base64 數據的列,我應該將其更新為 null 以嘗試釋放空間。
所以我編寫了一個腳本,它能夠在 base64 中設置所有圖像,期望在 Vacuum 之後釋放空間!
圖像設置為 null,執行真空,但表仍然具有完全相同的大小,我很確定必須立即釋放空間,所以我做錯了什麼?
真空完全能夠從我更新為空的巨大 varchar 數據中釋放空間嗎?(因為如果我要這樣做,我需要鎖定桌子,我需要確定)
轉儲大小減少了 10 倍,因此我預計數據庫大小會有類似的行為。
簡短的回答 - 是的。
更新行時,您會為表中保存的每一行創建一個新版本。
- Vacuum不會刪除這些行版本。
它確實使這些“死”行佔用的空間可供重用,但這並不會減少整體大小。
- Vacuum Full 完全移除死行。
這就是將空間釋放回作業系統的原因。
是的; 發生這種情況時,表將被鎖定。
請參閱PostgreSQL Wiki頁面上的“Vacuum Full”。