每天我從大表中刪除成千上萬條記錄,然後進行一些計算(使用新數據)並替換之前刪除的每條記錄。我認爲經常做vacuum tbl
會做到這一點。我知道它不會將磁盤空間返回到服務器,但是(因爲pg文檔)我以爲因爲我插入的記錄數量與我刪除的記錄數量相同,所以我不會丟失任何/多少磁盤空間。但是,在將表移動到不同的名稱空間之後(出於不相關的原因),該表從117GB變爲44GB!所以......「替換插入」的最佳磁盤保存策略
有沒有更好的策略比這使我的表不臃腫:
delete from tbl where ...etc... -- hundreds of thousands of rows removed
insert into tbl (...etc...) values (...etc...) -- hundreds of thousands of rows added back (fresh calcs)
.. repeat the above about 10 times a day ...
vacuum tbl
https://www.postgresql.org/docs/9.6/static/sql-vacuum.html
的PostgreSQL 9.6
我實際上沒有減少表的大小是我的答案在這裏: integer out of range and remaining disk space too small to convert id to bigint and other solutions
編輯1: 缺點vacuum full
對我來說太侷限了。我正在全天候處理東西,所以我不能擁有這樣的鎖,並且我的可用磁盤空間在任何時間點都非常有限。試圖以更好的方式來解決這個問題。
沒有什麼東西是絕對的「最好的」。根據某些特定標準,某物可能比其他物品更好。 'VACUUM FULL'可以幫助您壓縮數據,從而節省CPU/IO和鎖的開銷。 – zerkms
@zerkms - 請參閱我的編輯1.謝謝! – mountainclimber