Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?
Рейтинг: 23.9% · 64 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?
Postgres 14, таблица с активными апдейтами (статусы заказов). pg_stat показывает n_dead_tup растёт быстрее чем autovacuum его выгребает, таблица раздулась до 200ГБ при ~30ГБ реальных данных. Запросы по индексам деградируют. Что крутить кроме VACUUM FULL (который лочит всё)?
✔ Лучший ответ сформирован автоматически — dmitry4381
Ещё причина которую часто забывают: долгие транзакции и зависшие replication slots держат xmin horizon, и autovacuum физически НЕ может вычистить мёртвые строки новее этого горизонта. Проверь pg_stat_activity на старые транзакции и неактивные слоты, у меня bloat рос именно из-за забытого слота на реплике.
- semyon7320
- Сообщения: 14
- Зарегистрирован: Сб май 16, 2026 3:00 am
Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?
VACUUM FULL не вариант на проде, он берёт AccessExclusiveLock. Первым делом — autovacuum слишком ленивый по дефолту. Снижай autovacuum_vacuum_scale_factor для этой таблицы до 0.01-0.02 через ALTER TABLE SET, дефолтные 0.2 для горячих таблиц это смешно.
Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?
+ подними autovacuum_vacuum_cost_limit (или снизь cost_delay), иначе автовакуум сам себя троттлит и ползёт как черепаха. По дефолту он специально медленный чтобы не мешать, но на твоей нагрузке он просто не догоняет dead tuples.
- natalia2813
- Сообщения: 3
- Зарегистрирован: Чт май 14, 2026 12:51 pm
- elena_official
- Сообщения: 13
- Зарегистрирован: Чт май 14, 2026 10:22 pm
- grigory2102
- Сообщения: 17
- Зарегистрирован: Пн май 11, 2026 1:50 pm
Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?
А чтобы убрать УЖЕ накопленный bloat без локов — pg_repack. Пересобирает таблицу и индексы онлайн, без AccessExclusiveLock на всё время (короткий лок только в конце). Нужен только запас места на диске под копию.
- dmitry4381
- Сообщения: 4
- Зарегистрирован: Вт май 19, 2026 12:41 pm
Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?
✔ Лучший ответ — сформирован автоматически
Ещё причина которую часто забывают: долгие транзакции и зависшие replication slots держат xmin horizon, и autovacuum физически НЕ может вычистить мёртвые строки новее этого горизонта. Проверь pg_stat_activity на старые транзакции и неактивные слоты, у меня bloat рос именно из-за забытого слота на реплике.
Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?
Вот это в точку — нашёл idle in transaction висящий 6 часов от кривого воркера. Прибил, autovacuum сразу выгреб гору dead tuples. Плюс выставил scale_factor 0.02 и прогнал pg_repack. Таблица ужалась до 35ГБ. Спасибо, тред в закладки.
- zhenya_docker
- Сообщения: 23
- Зарегистрирован: Пт май 15, 2026 11:21 pm
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Контекст-окно растёт, а агент всё равно тупеет на больших задачах. Боремся с этим
10 ответов · 834 просмотров
-
- Собесы 2026: половина вопросов про AI и промпты. Кто-нибудь успевает готовиться?
7 ответов · 501 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость