Назад | Перейти на главную страницу

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

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

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

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

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

Вам следует выполнить ВАКУУМНЫЙ АНАЛИЗ, так как ВАКУУМ позволит повторно использовать пространство, используемое удаленными данными, и предотвратить циклическое повторение транзакций, а АНАЛИЗ обновит статистику планировщика, что должно привести к улучшению планов запросов для ваших отчетов.

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

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