VACUUM или VACUUM FULL на проде
Вопрос
Таблица после массового удаления занимает 40 ГБ, живых данных на 5 ГБ. Что верно про VACUUM и VACUUM FULL?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Обычный
VACUUMвернёт 35 ГБ операционной системе, не блокируя таблицу VACUUM FULLработает онлайн, но медленнее обычного и грузит дискVACUUMпереиспользует место, FULL переписывает под ACCESS EXCLUSIVEправильный ответ- Оба блокируют запись, но
VACUUM FULLещё и пересобирает статистику
Разбор
Обычный VACUUM не мешает чтению и записи: он освобождает место мёртвых версий для новых строк этой же таблицы и отрезает файл только при пустых страницах в самом конце. VACUUM FULL (как и CLUSTER) записывает живые строки в новый файл и возвращает место ОС, но держит ACCESS EXCLUSIVE: таблица недоступна даже на чтение. Для прода без простоя используют расширение pg_repack или пересоздание через партиции. Статистику обновляет ANALYZE, а не FULL.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
MVCC и VACUUM в PostgreSQL
Следующий вопрос
Зачем нужна заморозка и что такое wraparound
Термины по теме
Ещё по теме «Транзакции и изоляция»
- Advisory-блокировки в PostgreSQL
- Как избежать deadlock при переводах
- Взаимоблокировки: как ловить и предотвращать
- Долгая транзакция и раздувание таблиц
- Что делает PostgreSQL при deadlock
- Уровень изоляции по умолчанию в PostgreSQL
- Как обеспечивается Durability
- ACID