Нужно ли REINDEX и VACUUM таблицу после удаления большого количества строк?

10

Я использую базу данных PostgreSQL, в которой есть несколько таблиц, в которых хранится информация журналов. Эта информация предназначена только для отчетов и выводится в файл и удаляется из базы данных, если она старше 30 дней.

Может быть удалено миллионы строк, и мы выполняем REINDEX каждый раз после удаления.

Достаточно ли этого, или мы также должны использовать ВАКУУМ или ВАКУУМНЫЙ АНАЛИЗ? Или REINDEX не нужен, и мы должны вместо этого просто запустить VACUUM или VACUUM ANALYZE?

Мы используем PostgreSQL 8.2.3, который, как я считаю, не позволяет автоматически пылесосить.

cowgod
источник
2
Возможно, вы захотите рассмотреть разделение, см. Postgresql.org/docs/9.0/static/ddl-partitioning.html ; тогда вы можете просто сбросить перегородки и избежать пылесоса.
Алекс
3
Версия 8.2.3 имеет auto_vacuum, см. Руководство, но вы должны обновить как можно скорее. Текущая версия 8.2 - 8.2.17. Вы позади 14 патчей, включая пару патчей безопасности. Лучше всего перейти на 8.4 или даже 9.0, auto_vacuum был улучшен.
Фрэнк Хейкенс

Ответы:

13

Вы должны выполнить VACUUM ANALYZE, поскольку VACUUM позволит повторно использовать пространство, используемое удаленными данными, и предотвратить обход транзакций, а ANALYZE обновит статистику планировщика, что должно привести к улучшению планов запросов для ваших отчетов.

REINDEX теоретически не требуется, но вы можете обнаружить, что это приводит к повышению производительности, поскольку индекс является непрерывным.

Соответствующие страницы документации для 8.2 находятся здесь (обычная переиндексация) и здесь (обычная очистка пылесосом) .

hmallett
источник