Устранение раздувания таблиц (Bloat) в PostgreSQL через VACUUM
Архитектура MVCC в PostgreSQL не перезаписывает старые данные при выполнении команд UPDATE и DELETE, а создает новые версии строк, помечая старые как «мертвые кортежи» (Dead Tuples). Если фоновый процесс автоочистки autovacuum не успевает их собирать, таблицы раздуваются в размерах (Bloat), замедляя выполнение запросов.
Проведение регулярного обслуживания и ручной очистки освобождает занятое дисковое пространство и актуализирует статистику планировщика запросов для быстрого поиска по индексам.
Частые вопросы
❓ Возвращает ли обычный VACUUM место операционной системе?
Обычный VACUUM освобождает страницы для повторного использования внутри PostgreSQL, но не уменьшает размер файла на диске.
❓ Когда требуется применять VACUUM FULL?
Только при критическом раздувании, так как эта команда намертво блокирует таблицу на чтение и запись до завершения пересборки.
❓ Как очистить базу без блокировки клиентов?
Для сжатия таблиц без простоя сервиса используется сторонняя утилита `pg_repack`.