Sobes.tech
Назад к вопросам
Junior — Middle
61

Можете объяснить, что означает команда VACUUM FULL в SQL и в чем ее отличие от обычного VACUUM?

Компании, где спрашивали
OZONOZON

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

VACUUM FULL в PostgreSQL — это более агрессивная очистка таблицы, которая не только освобождает место от «мертвых» строк, но и возвращает его операционной системе. В отличие от обычного VACUUM, он требует более сильных блокировок и обычно выполняется дольше. На собеседовании важно показать, что VACUUM FULL — это не повседневная операция, а инструмент для случаев, когда нужно реально уменьшить размер таблицы на диске.

Определение:

VACUUM в PostgreSQL убирает следы удалённых и обновлённых строк внутри таблицы, чтобы база могла повторно использовать это место для новых записей. При этом размер файла таблицы обычно не уменьшается, а просто становится доступным для повторного использования.

VACUUM FULL делает более глубокую очистку: он переписывает таблицу заново и уплотняет данные, поэтому освобождённое место возвращается на уровень файловой системы. Цена за это — более долгий запуск и более жёсткая блокировка таблицы на время операции.

Пример использования:

-- Обычная очистка: место становится доступным внутри таблицы
VACUUM orders;

-- Полная очистка: таблица переписывается и реально уменьшается на диске
VACUUM FULL orders;

Типичный случай для VACUUM FULL — после массового удаления старых данных, когда таблица сильно раздутa и нужно уменьшить занимаемое место на диске.

Пояснение кода:

Код нужен, потому что разница между командами лучше всего видна на примере SQL-запросов.

  • VACUUM orders; очищает таблицу orders от «мёртвых» строк.
  • После этого PostgreSQL может переиспользовать освобождённые страницы для новых вставок и обновлений.
  • Физический размер файла таблицы при этом обычно не уменьшается.
  • VACUUM FULL orders; создаёт компактную копию таблицы без лишнего мусора.
  • После завершения операции файл таблицы становится меньше, но во время выполнения доступ к таблице сильно ограничен.

Ключевые моменты:

  • Обычный VACUUM освобождает место внутри таблицы для повторного использования.
  • VACUUM FULL переписывает таблицу и уменьшает её физический размер на диске.
  • VACUUM FULL работает медленнее и требует более жёстких блокировок.
  • Использовать VACUUM FULL стоит редко, обычно после массовых удалений или сильного «раздувания» таблицы.
  • Для регулярного обслуживания чаще подходит обычный VACUUM, а не VACUUM FULL.