请勿使用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,以便它能满足你的需求吗? –