Ответ 1
Не используйте autovacuum. Greenplum не PostgreSQL, и autovacuum не работает в базе данных. Я настоятельно рекомендую не помечать сообщения Greenplum PostgreSQL, потому что вы, скорее всего, получите неверную информацию. Это будет похоже на публикацию вопроса об 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, и вместо этого используйте "Append Optimized" или AO для краткости. Он использует карту видимости, чтобы скрыть удаленные строки, и файлы меньше, поэтому они быстрее. Он также позволяет сжимать таблицу и ориентировать столбцы.
Таблицы AO также нуждаются в обслуживании, но в отличие от таблиц кучи, он имеет порог уплотнения, встроенный в управляемый gp_appendonly_compaction_threshold GUC. Просто VACUUM все таблицы AO и база данных будут автоматически перестраивать таблицу, если процент скрытых строк превышает 10%.
Greenplum все еще страдает от проблемы возраста замораживания, которая была унаследована от PostgreSQL. Этот script обычно не будет возвращать какие-либо строки, но в старых установках с таблицами, которые не были затронуты в течение очень долгого времени, вы можете начать вакуумные таблицы.
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
Пока вы на нем, вам следует запланировать анализ b для анализа всех таблиц на регулярной основе. Пример:
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