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


10

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

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

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

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


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 находятся здесь (обычная переиндексация) и здесь (обычная очистка пылесосом) .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.