Перейти к содержимому
6 / 15

Раздувание таблиц и autovacuum: как диагностировать и как настраивать?

Раздувание — это доля мёртвых версий строк и пустого места, которое уже не вернулось операционной системе. Симптомы: размер таблицы растёт быстрее числа строк, планы читают больше страниц, index-only scan перестаёт работать. Автовакуум по умолчанию запускается, когда мёртвых версий накопилось больше autovacuum_vacuum_threshold (50) плюс autovacuum_vacuum_scale_factor (0,2 — то есть 20%) от размера таблицы: для таблицы в сто миллионов строк это двадцать миллионов мёртвых версий, что почти всегда слишком поздно. Поэтому на больших горячих таблицах scale factor понижают до 0,01–0,05 или задают его в абсолютных числах через autovacuum_vacuum_max_threshold в PostgreSQL 18. Второй частый тормоз — autovacuum_vacuum_cost_delay и лимиты стоимости, из-за которых вакуум работает медленнее, чем таблица пачкается. Уже раздутую таблицу чинят не VACUUM FULL в рабочее время, а pg_repack или переливкой.

Раздувание таблиц и autovacuum: как диагностировать и как настраивать? | JScriptiser