#why-vacuum
Зачем нужен VACUUM и что именно он делает?
Что отвечать
Каждый UPDATE и DELETE оставляет мёртвую версию строки - она больше никому не видна, но занимает место в странице. VACUUM проходит по таблице, находит версии, которые не видны ни одному живому снимку, и освобождает их слоты под переиспользование; место остаётся за таблицей, но внутри страниц появляются дырки под новые строки. Заодно он обновляет карту свободного места (FSM) и карту видимости (VM), подрезает указатели строк и продвигает заморозку. Обычный VACUUM не отдаёт место файловой системе и работает без блокировки на запись.
Что хотят услышать
Senior должен: - объяснить, что vacuum переиспользует место внутри таблицы, а не возвращает его ОС (это делает только `VACUUM FULL`) - связать «что можно убрать» с горизонтом: удаляются версии старше самого старого живого снимка - назвать побочные задачи: обновление FSM/VM, заморозка, подрезка указателей - знать, что обычный vacuum не мешает SELECT/UPDATE, берёт лишь лёгкую блокировку
Подводные камни
- ✗ Сказать «VACUUM освобождает место на диске» - обычный vacuum переиспользует место внутри таблицы, диск отдаёт только `VACUUM FULL`
- ✗ Думать, что vacuum убирает любые мёртвые версии - только те, что старше горизонта
- ✗ Считать, что vacuum блокирует запись - обычный режим работает онлайн
Follow-up
- ? Чем VACUUM отличается от VACUUM FULL по эффекту на диск?
- ? Какие версии строк vacuum не имеет права удалить?
- ? Зачем vacuum трогает FSM и VM?
Глубина в базе знаний