На хосте продакшен-БД срабатывает алерт о нехватке места на диске — диагностируйте и среагируйте
Алерт будит вас: раздел данных хоста PostgreSQL почти полон. Ниже — что вы видите на машине. Пройдите по шагам, как вы триажите и реагируете — что проверяете первым, немедленное действие, чтобы БД осталась жива, и устойчивый фикс — не удаляя файлы данных руками.
ALERT: использование диска /var/lib/postgresql = 96% (480G/500G)
$ df -h /var/lib/postgresql → 96% занято
$ du -sh /var/lib/postgresql/* → base/ 410G, pg_wal/ 60G
у крупнейших таблиц активные UPDATE/DELETE; autovacuum не запускался сутками
Определите причину и дайте ответ.
Сначала подтвердите через df/du, что съедает место — данные, bloat из мёртвых кортежей, WAL или логи. Немедленно: освободите безопасное место (ротация логов, архив старого WAL), чтобы БД осталась записываемой. Устойчивый фикс bloat: VACUUM (ANALYZE) освобождает место кортежей и обновляет статистику; разберитесь с отставшим autovacuum и увеличьте диск. Не удаляйте файлы каталога данных вручную.
- ✗Удалять файлы в каталоге данных руками, повреждая БД
- ✗Пропускать триаж и действовать, не зная, что занимает место
- ✗Считать
VACUUMтюнером запросов, а не освобождением места
- →Почему
VACUUMосвобождает место для повторного использования, а для сжатия файла нуженVACUUM FULL? - →Что может заставить autovacuum отставать на таблице с высокой нагрузкой изменений?
Решение
1. Триаж — что именно съедает диск
$ df -h /var/lib/postgresql # подтвердить заполнение раздела
$ du -sh /var/lib/postgresql/* # base/ (данные+bloat) vs pg_wal/ (журнал) vs логи
В примере base/ занимает 410G при активных UPDATE/DELETE и отставшем autovacuum — это классический bloat: мёртвые версии строк не освобождены.
2. Немедленное облегчение (БД должна остаться записываемой)
Освободите безопасное место: ротация и очистка логов, архивирование старого WAL. Раздел WAL на 60G — проверьте, не копится ли он из-за неактивного слота репликации.
3. Устойчивый фикс
VACUUM (ANALYZE) big_table; -- освободить место мёртвых кортежей для повторного использования
VACUUM возвращает место под мёртвыми кортежами для повторного использования внутри файла; ANALYZE обновляет статистику планировщика. Разберитесь, почему отстал autovacuum (нагрузка, настройки порогов). Затем увеличьте диск или вынесите pg_wal на отдельный том.
⚠️ Никогда не удаляйте файлы внутри каталога данных через rm — это повредит БД.