1. 程式人生 > >第二章 SQL命令參考- VACUUM

第二章 SQL命令參考- VACUUM

Garbage-collectsand optionally analyzes a database.

概要

VACUUM[FULL] [FREEZE] [VERBOSE] [table]

VACUUM[FULL] [FREEZE] [VERBOSE] ANALYZE

[table[(column [, ...] )]]

描述

vacuum回收已刪除的元組佔用的儲存。Greenplum在日常資料操作中,更新或刪除的資料並沒有從物理表中刪除,資料仍然存在於磁碟上,直到vacuum操作完成。因此,有必要定期做vacuum,尤其是在頻繁更新的表。

在沒有引數的情況下,vacuum處理當前資料庫中的每個表格。有了引數,vacuum只處理那張表。

VACUUMANALYZE 對每個表先執行vacuum,然後執行analyze。這對於日常維護指令碼一個方便的組合形式。請參閱分析有關其處理的更多細節。

vacuum(無FULL)只能標記那些空間是在表的末端的空間以備將來重複使用表和索引資料和回收空間再利用,獲得的所是表排它鎖。在表的開始或中間的未使用空間仍保持原樣。對於堆表,這種形式的命令都可以在正常的讀取和表寫入並行操作,因為沒有獲得獨佔鎖。

對於附加優化表,vacuum首先壓縮索引,再依次壓縮每個段檔案,最後對輔助關係進行vacuum,並更新統計事實表。在每個環節,有效行從當前段檔案複製到一個新的段檔案,然後當前的段檔案被放入待刪除佇列進行刪除,並將新的段檔案置為可用。追加優化表中的空vacuum允許掃描,插入,刪除,和表中的更新,與此同時一個分段的檔案被壓縮。

VACUUM FULL確實更廣泛的處理,包括跨越塊的元組的移動要儘量表壓縮到磁碟塊的最小數目。這種形式要慢得多,並要求每個表上的排它鎖正在處理它。

隨著附加優化表,VACUUM FULL獲取排它鎖,禁止插入,更新和刪除,但是SELECT語句可以在大部分的壓實過程中被執行。當所有可見行已被複制到新的段檔案,而新段可用和老段設定要刪除的表被鎖定簡要介紹。

重要提示:有關使用真空的資訊,FULL真空,真空ANALYZE詳見備註

Outputs

指定詳細資訊時,vacuum會發出進度訊息以指示當前正在處理哪個表。 有關表格的各種統計資訊也被打印出來。

parameter

FULL

選擇一個完整的真空,這可能會回收更多的空間,但需要更長的時間,並鎖定表。

FREEZE

指定FREEZE相當於在vacuum_freeze_min_age伺服器配置引數設定為零的情況下執行VACUUM。 有關vacuum_freeze_min_age的資訊,請參閱伺服器配置引數。.

VERBOSE

列印每個表格的詳細真空活動報告。

ANALYZE

更新規劃人員使用的統計資訊,以確定執行查詢的最有效方式。

table

真空的特定表的名稱(可選模式修飾)。 預設為當前資料庫中的所有表。

column

要分析的特定列的名稱。 預設為所有列。

Notes

vacuum不能在事務塊裡面執行。

關鍵的建議生產資料庫經常vacuum(至少每晚),以除去到期行。新增或刪除大量的行之後,執行vacuum analyze命令對效能提升會有好的作用。這將更新與最近的更改結果系統目錄,並允許Greenplum資料引擎查詢優化器,使規劃的查詢更好的選擇。

重要提示:經常PostgreSQL有所謂的自動清理後臺程式的獨立可選的伺服器程序,其目的是自動執行vacuum和ANALYZE命令。該功能在Greenplum資料引擎當前已禁用。

vacuum導致I / O流量的大幅增加,這可能會導致其它活動會話的效能較差。因此,最好是在低使用時間進行真空資料庫。

對於堆表,過期的行儲存在所謂的自由空間對映中。 可用空間對映的大小必須足夠大,以覆蓋資料庫中所有堆表的空行。 如果尺寸不夠大,那麼溢位自由空間對映的死行所佔用的空間就不能被常規的VACUUM命令收回。。

VACUUM命令跳過外部表。

VACUUM FULL回收所有到期的行空間,但是它要求在每個正在處理的表上進行獨佔鎖定,這是一項非常昂貴的操作,可能需要很長時間才能在大型的分散式Greenplum資料庫表上完成。 Pivotal建議在資料庫維護期間執行VACUUM FULL操作。

作為VACUUM FULL的替代方法,您可以使用CREATE TABLEAS語句重新建立表並刪除舊錶。

適當調整自由空間圖的大小。 使用以下伺服器配置引數配置可用空間對映:

圖:

•     max_fsm_pages

•     max_fsm_relations

對於追加優化表,VACUUM需要足夠的可用磁碟空間來容納VACUUM過程中的新段檔案。 如果段檔案中隱藏行與總行數之比小於閾值(預設為10),則不壓縮段檔案。 閾值可以使用gp_appendonly_compaction_threshold伺服器配置引數進行配置。 VACUUM FULL忽略閾值,並重寫段檔案,而不考慮比率。 VACUUM可以使用gp_appendoniy_compaction伺服器配置引數禁用附加優化表。 有關伺服器配置引數的資訊,請參閱伺服器配置引數。

如果在追加優化表被抽真空時檢測到併發可序列化事務,則當前和後續段檔案不被壓縮。 如果段檔案已經被壓縮,但是在刪除原始段檔案的事務中檢測到併發可序列化的事務,則跳過該刪除。 真空完成後,這可能會使一個或兩個段檔案處於“等待下降”狀態。

有關Greenplum資料庫併發控制的更多資訊,請參閱“Greenplum資料庫管理員指南”中的“日常系統維護任務”。

示例

Vacuum alltables in the current database:

VACUUM;

Vacuum aspecific table only:

VACUUMmytable;

Vacuum alltables in the current database and collect statistics for the query optimizer:

VACUUM ANALYZE;

相容性

There is no vacuum statement in the SQL standard.

相關參考

ANALYZE