請勿使用autovacuum。 Greenplum不是PostgreSQL,並且autovacuum在數據庫中不起作用。我強烈建議不要使用PostgreSQL標記Greenplum帖子,因爲您可能會得到不正確的信息。這就像發佈一個關於OSX的問題,並且標記BSD。
真空堆表與膨脹:
psql -t -A -c "SELECT E'VACUUM \"' || bdinspname || E'\".\"' || bdirelname || E'\";' FROM gp_toolkit.gp_bloat_diag WHERE bdinspname <> 'pg_catalog'" | psql -e
但大多數都在您的Greenplum表的可能不會是堆它採用MVCC,而使用「附加優化」或AO的簡稱。它使用可見性映射來隱藏已刪除的行,並且文件更小,因此速度更快。它也允許表格被壓縮和列嚮導。
AO表還需要維護,但與堆表不同,它具有由gp_appendonly_compaction_threshold GUC控制的壓縮閾值。只要VACUUM所有AO表和數據庫將自動重建表,如果隱藏行的百分比超過10%。
Greenplum仍然遭受從PostgreSQL繼承的凍結年齡問題。這個腳本通常不會返回任何行,而是在較長時間沒有被觸摸的表格的較早安裝中,您可能會開始抽真空表格。
vacuum_freeze_min_age=$(psql -t -A -c "show vacuum_freeze_min_age;")
psql -t -A -c "SELECT E'VACUUM \"' || n.nspname || E'\".\"' || c.relname || E'\";' FROM pg_class c join pg_namespace n ON c.relnamespace = n.oid WHERE age(relfrozenxid) > $vacuum_freeze_min_age AND c.relkind = 'r'" | psql -e
當你在它的時候,你應該安排analyzeb來定期分析所有的表。例如:
analyzedb -d gpadmin -s tpcds
別忘了目錄!
psql -t -A -c "SELECT E'VACUUM ANALYZE \"' || n.nspname || E'\".\"' || c.relname || E'\";' FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE n.nspname = 'pg_catalog' AND c.relkind = 'r'" | psql -e
這重新索引目錄索引:
reindexdb -s
如果它是基於PostgreSQL的8.2,它應該有自動清理。使用它,而不是試圖自己弄清楚。 –
感謝您的回覆,是autovacuum在那裏,但我有很多表,每個大小約150GB。所以我也需要手動活動。 – Anvesh
爲什麼?你不能配置autovacuum,以便它能滿足你的需求嗎? –