1. 程式人生 > >Postgresql之VACUUM和VACUUM FULL對比

Postgresql之VACUUM和VACUUM FULL對比

其它 一次 能夠 cat 定期 規劃 相對 得到 如果

VACUUM命令存在兩種形式,VACUUM和VACUUM FULL,它們之間的區別見如下表格:

無VACUUM

VACUUM

VACUUM FULL

刪除大量數據之後

只是將刪除數據的狀態置為已刪除,該空間不能記錄被重新使用。

如果刪除的記錄位於表的末端,其所占用的空間將會被物理釋放並歸還操作系統。如果不是末端數據,該命令會將指定表或索引中被刪除數據所占用空間重新置為可用狀態,那麽在今後有新數據插入時,將優先使用該空間,直到所有被重用的空間用完時,再考慮使用新增的磁盤頁面。

不論被刪除的數據是否處於數據表的末端,這些數據所占用的空間都將被物理的釋放並歸還於操作系統。之後再有新數據插入時,將分配新的磁盤頁面以供使用。

執行效率

由於只是狀態置為操作,因此效率較高。

在當前版本的PostgreSQL(v9.1)中,該命令會為指定的表或索引重新生成一個數據文件,並將原有文件中可用的數據導入到新文件中,之後再刪除原來的數據文件。因此在導入過程中,要求當前磁盤有更多的空間可用於此操作。由此可見,該命令的執行效率相對較低。

被刪除的數據所占用的物理空間是否被重新規劃給操作系統。

不會

不會

在執行VACUUM命令時,是否可以並發執行針對該表的其他操作。

由於該操作是共享鎖,因此可以與其他操作並行進行。

由於該操作需要在指定的表上應用排它鎖,因此在執行該操作期間,任何基於該表的操作都將被掛起,知道該操作完成。

推薦使用方式

在進行數據清空時,可以使用truncate操作,因為該操作將會物理的清空數據表,並將其所占用的空間直接歸還於操作系統。

為了保證數據表的磁盤頁面數量能夠保持在一個相對穩定值,可以定期執行該操作,如每天或每周中數據操作相對較少的時段。

考慮到該操作的開銷,以及對其他錯誤的排斥,推薦的方式是,定期監控數據量變化較大的表,只有確認其磁盤頁面占有量接近臨界值時,才考慮執行一次該操作。即便如此,也需要註意盡量選擇數據操作較少的時段來完成該操作。

執行後其它操作的效率

對於查詢而言,由於存在大量的磁盤頁面碎片,因此效率會逐步降低。

相比於不執行任何VACUUM操作,其效率更高,但是插入的效率會有所降低。

在執行完該操作後,所有基於該表的操作效率都會得到極大的提升。

by 波羅

Postgresql之VACUUM和VACUUM FULL對比