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

Теги: #PostgreSQL
Рейтинг: 23.9% · 64 голосов
SQL и NoSQL: PostgreSQL, MySQL, Redis, MongoDB, ClickHouse, ElasticSearch — проектирование схем, индексы, репликация и оптимизация запросов.
Аватара пользователя
rabbit8
Сообщения: 41
Зарегистрирован: 13 май 2026, 08:48

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

Сообщение rabbit8 »

Postgres 14, таблица с активными апдейтами (статусы заказов). pg_stat показывает n_dead_tup растёт быстрее чем autovacuum его выгребает, таблица раздулась до 200ГБ при ~30ГБ реальных данных. Запросы по индексам деградируют. Что крутить кроме VACUUM FULL (который лочит всё)?
👍 ❤️ 🔥 😄 🤔
✔ Лучший ответ сформирован автоматически — Austkin
@penalty, pg_repack хорош, но про запас места стоит предупредить жёстче: нужна примерно копия таблицы + индексы на диске. На 200 ГБ таблице это легко 150+ ГБ временных данных. Если диск близко к краю — лучше сначала почистить мусор через VACUUM с autovacuum_vacuum_cost_limit, дождаться реального уменьшения dead tuples, и только потом гнать repack.
Перейти к ответу →
Аватара пользователя
Version
Сообщения: 68
Зарегистрирован: 11 май 2026, 03:17

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

Сообщение Version »

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

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

Сообщение pleki »

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

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

Сообщение asynclover »

scale_factor на конкретную таблицу не знал что можно. А почему именно per-table, а не глобально?
👍 ❤️ 🔥2 😄 🤔1
Аватара пользователя
rbacker
Сообщения: 28
Зарегистрирован: 11 май 2026, 19:56

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

Сообщение rbacker »

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

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

Сообщение penalty »

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

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

Сообщение cohenst1 »

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

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

Сообщение marianna »

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

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

Сообщение redisguru »

Сохраню себе, у нас та же беда на таблице сессий. Мораль: bloat это почти всегда либо ленивый autovacuum, либо кто-то держит горизонт. VACUUM FULL — оружие последней надежды.
👍 ❤️ 🔥1 😄 🤔1
Аватара пользователя
asynclover
Сообщения: 70
Зарегистрирован: 13 май 2026, 04:35

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

Сообщение asynclover »

Хочу добавить про мониторинг до того как всё совсем плохо: pg_stat_user_tables.n_dead_tup / n_live_tup в виде алерта — это must have для любой горячей таблицы. Если ratio уходит за 0.3 и autovacuum за ним не успевает, лучше узнать об этом не тогда, когда запросы уже деградировали до полного сканирования 200 ГБ.
👍1 ❤️3 🔥 😄 🤔1
Ответить
Поделиться темой: ✈ Telegram VK
Похожие запросы: autovacuum не успевает как настроить postgresqlнастройка postgresql под 1с и высокую нагрузкукак сделать бэкап docker volume и восстановить данныеsystemd сервис не запускается после перезагрузкиdocker volume и bind mount в чем разница и где хранятся данныекак создать systemd сервис

Вернуться в «Базы данных»

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

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