Напомню, что мы начали с вопросов, связанных с
изоляцией, сделали отступление про
организацию данных на низком уровне, подробно поговорили
о версиях строк и о том, как из версий получаются
снимки данных.
Затем мы рассмотрели
внутристраничную очистку (и HOT-обновления),
обычную очистку, ну а сегодня посмотрим на автоматическую очистку.
Автоочистка (autovacuum)
Мы уже говорили о том, что обычная очистка в нормальных условиях (когда никто не удерживает надолго горизонт транзакций) должна справляться со своей работой. Вопрос в том, как часто ее вызывать.
Если очищать изменяющуюся таблицу слишком редко, она вырастет в размерах больше, чем хотелось бы. Кроме того, для очередной очистки может потребоваться несколько проходов по индексам, если изменений накопилось слишком много.
Если очищать таблицу слишком часто, то вместо полезной работы сервер будет постоянно заниматься обслуживанием — тоже нехорошо.
Заметим, что запуск обычной очистки по расписанию никак не решает проблему, потому что нагрузка может изменяться со временем. Если таблица стала обновляться активней, то и очищать ее надо чаще.
Автоматическая очистка — как раз тот самый механизм, который позволяет запускать очистку в зависимости от активности изменений в таблицах.