База: VACUUM ANALYZE large_table_name; — очистить фрагментацию после массового удаления.
Команда `VACUUM ANALYZE large_table_name;` в PostgreSQL выполняет сразу две важные операции над указанной таблицей: очистку «мёртвых» строк (VACUUM) и обновление статистики планировщика запросов (ANALYZE).
**Что делает VACUUM?**
Когда вы удаляете строки командой DELETE или обновляете их через UPDATE, PostgreSQL не удаляет данные физически немедленно. Вместо этого старые версии строк помечаются как «мёртвые» (dead tuples) и остаются на диске. Это приводит к фрагментации таблицы: файл данных разрастается, индексы содержат ссылки на несуществующие строки, а производительность запросов падает. VACUUM проходит по таблице, помечает пространство мёртвых строк как доступное для повторного использования и очищает индексы от устаревших записей.
**Что делает ANALYZE?**
ANALYZE собирает статистику о распределении данных в таблице — количество уникальных значений, гистограммы, корреляции. Эта статистика хранится в системном каталоге `pg_statistic` и используется планировщиком запросов для выбора оптимального плана выполнения. После массового удаления статистика устаревает, и планировщик может принимать неверные решения — например, выбирать последовательное сканирование вместо индексного. ANALYZE исправляет это.
**Почему важно запускать после массового удаления?**
После DELETE большого числа строк:
— Таблица содержит много мёртвых кортежей, занимающих место.
— Статистика больше не отражает реальное распределение данных.
— Autovacuum может не успеть обработать таблицу достаточно быстро.
— Запросы могут выполняться медленнее из-за устаревших планов.
**Отличие от VACUUM FULL**
Обычный VACUUM не возвращает место операционной системе — он лишь помечает его как доступное внутри PostgreSQL. Если нужно физически уменьшить размер файла таблицы, используется `VACUUM FULL large_table_name;`, однако эта операция блокирует таблицу на всё время выполнения и требует дополнительного дискового пространства.
**Пример использования в CSV-строке:**
VACUUM ANALYZE large_table_name;
Эта строка подходит для включения в скрипт обслуживания базы данных, документацию или обучающий CSV-файл с примерами SQL-команд.
**Рекомендации:**
— Запускайте VACUUM ANALYZE после любых массовых операций (DELETE, UPDATE, COPY).
— Настройте параметры autovacuum для высоконагруженных таблиц.
— Мониторьте количество мёртвых кортежей через `pg_stat_user_tables`.
