Сейчас поговорим про одну из самых «страшных» команд в арсенале DBA —
VACUUM FULL. Она часто спасает, когда база разрослась до неприличных размеров… но может и «уронить» прод, если запустить не вовремя.Что делает VACUUM FULL?
Он освобождает табличное пространство, физически удаляя "мертвые" строки и переписывая всю таблицу заново. Это не просто очистка, а именно перезапись. Поэтому:
- Таблица полностью блокируется на запись и чтение.
- Используется временное дисковое пространство (вплоть до размера таблицы).
- Может существенно сократить размер базы — особенно, если давно не было очистки.
Когда применять:
- После массового удаления данных.
- Когда обычный
VACUUM не помогает уменьшить размер базы.- При миграции/переезде базы, чтобы максимально уменьшить backup.
Чего опасаться:
- На больших таблицах — это может занять часы.
- Блокировки = пользователи «висят».
- Нужно много свободного места на диске.
Альтернатива: если задача — просто освободить место и база под нагрузкой, рассмотрите
pg_repack. Он позволяет делать реорганизацию без блокировок (но требует отдельной установки).Лично я использую
VACUUM FULL только в окне обслуживания или на read replica.А вы? Когда последний раз делали
VACUUM FULL?#db
👉 @database_info
