Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?

Теги: #PostgreSQL
Рейтинг: 23.9% · 64 голосов
SQL и NoSQL: PostgreSQL, MySQL, Redis, MongoDB, ClickHouse, ElasticSearch — проектирование схем, индексы, репликация и оптимизация запросов.
Ответить
Аватара пользователя
egor9725
Сообщения: 27
Зарегистрирован: Вс май 10, 2026 9:17 pm

Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?

Сообщение egor9725 »

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. Кто как тюнит?

Сообщение semyon7320 »

VACUUM FULL не вариант на проде, он берёт AccessExclusiveLock. Первым делом — autovacuum слишком ленивый по дефолту. Снижай autovacuum_vacuum_scale_factor для этой таблицы до 0.01-0.02 через ALTER TABLE SET, дефолтные 0.2 для горячих таблиц это смешно.
👍1 ❤️ 🔥1 😄 🤔
Аватара пользователя
egor1580
Сообщения: 25
Зарегистрирован: Вс май 10, 2026 9:27 pm

Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?

Сообщение egor1580 »

+ подними autovacuum_vacuum_cost_limit (или снизь cost_delay), иначе автовакуум сам себя троттлит и ползёт как черепаха. По дефолту он специально медленный чтобы не мешать, но на твоей нагрузке он просто не догоняет dead tuples.
👍1 ❤️1 🔥1 😄 🤔
Аватара пользователя
natalia2813
Сообщения: 3
Зарегистрирован: Чт май 14, 2026 12:51 pm

Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?

Сообщение natalia2813 »

scale_factor на конкретную таблицу не знал что можно. А почему именно per-table, а не глобально?
👍 ❤️ 🔥2 😄 🤔1
Аватара пользователя
elena_official
Сообщения: 13
Зарегистрирован: Чт май 14, 2026 10:22 pm

Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?

Сообщение elena_official »

Потому что глобально агрессивный autovacuum будет молотить и мелкие таблицы где это не нужно, жрать IO. У тебя проблема в одной горячей таблице — её и тюнь точечно. Глобально оставь дефолт.
👍 ❤️ 🔥 😄1 🤔
Аватара пользователя
grigory2102
Сообщения: 17
Зарегистрирован: Пн май 11, 2026 1:50 pm

Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?

Сообщение grigory2102 »

А чтобы убрать УЖЕ накопленный bloat без локов — pg_repack. Пересобирает таблицу и индексы онлайн, без AccessExclusiveLock на всё время (короткий лок только в конце). Нужен только запас места на диске под копию.
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
dmitry4381
Сообщения: 4
Зарегистрирован: Вт май 19, 2026 12:41 pm

Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?

Сообщение dmitry4381 »

✔ Лучший ответ — сформирован автоматически
Ещё причина которую часто забывают: долгие транзакции и зависшие replication slots держат xmin horizon, и autovacuum физически НЕ может вычистить мёртвые строки новее этого горизонта. Проверь pg_stat_activity на старые транзакции и неактивные слоты, у меня bloat рос именно из-за забытого слота на реплике.
👍2 ❤️ 🔥1 😄 🤔
Аватара пользователя
daria_ssh
Сообщения: 3
Зарегистрирован: Вс май 10, 2026 8:59 pm

Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?

Сообщение daria_ssh »

Вот это в точку — нашёл idle in transaction висящий 6 часов от кривого воркера. Прибил, autovacuum сразу выгреб гору dead tuples. Плюс выставил scale_factor 0.02 и прогнал pg_repack. Таблица ужалась до 35ГБ. Спасибо, тред в закладки.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
zhenya_docker
Сообщения: 23
Зарегистрирован: Пт май 15, 2026 11:21 pm

Re: Autovacuum не успевает, bloat растёт, таблица 200ГБ а живых данных 30. Кто как тюнит?

Сообщение zhenya_docker »

Сохраню себе, у нас та же беда на таблице сессий. Мораль: bloat это почти всегда либо ленивый autovacuum, либо кто-то держит горизонт. VACUUM FULL — оружие последней надежды.
👍 ❤️ 🔥1 😄 🤔1
Ответить
Поделиться темой: ✈ Telegram VK

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость