儘管您正在使用DELETE
和VACUUM
,但您的表格確實在磁盤上保持相同大小。根據the documentation on VACUUM
,普通VACUUM
只能通過從文件末尾截斷可用空間而不重新安排實時行來釋放回操作系統的空間。
該空間仍然是「免費」的,因爲PostgreSQL可以將其重新用於其他新行。重複使用PostgreSQL沒有給OS返回的空間要比用新空間擴展關係要快得多,所以這通常是可取的。
Pg不只是給這個空間回來的另一個原因是,它只能給操作系統空間時,當它是一個連續的塊,沒有可見的行直到文件結束。這種情況並沒有發生,所以實際上Pg需要移動一些行來壓縮表格,並允許它最終釋放空間,就像文件系統上的碎片整理一樣。這是一個效率低下且緩慢的過程,它可以直觀地使表訪問速度更慢,而不是更快,所以它並不總是一個好主意。
如果您有一個大多數但不是完全空的關係,則可以使用VACUUM FULL
(頁面9.0及更高版本)或CLUSTER
(所有版本)來釋放空間。如果你想補充桌子,這往往會適得其反。實際上離開它實際上更好。
(對於我通過類似的術語表示「活」和「看得見的」看documentation on MVCC這將有助於你瞭解PG的表組織。)
個人而言,我會跳過手動VACUUM
你的情況。如果需要的話,打開自動清理。如果您真的需要,可以考慮對錶格進行分區,在完成處理後按分區對每個分區進行分區處理。
PostgreSQL版本?在各個版本中'VACUUM'已經發生了很大的變化。 **問題**中始終提及您的PostgreSQL版本。 – 2013-03-25 10:38:40
@克雷格抱歉,已完成 – zapadlo 2013-03-25 10:40:16