Когда-то был один вакуум, полный и блокирующий. Потом ребята из PostgreSQL добавили неблокирующий вакуум. Но все равно приходилось планировать это самостоятельно.
Затем какой-то гений создал демона, который автоматически запускал для вас вакуум, когда в этом нуждались таблицы. Он использует ту же самую команду вакуума, которую использовали бы вы или я, но имеет множество настроек, особенно по умолчанию, которые делают его медленнее и менее навязчивым. В первую очередь эти настройки предназначены для рабочих потоков (по умолчанию 3), стоимости задержки (20 мс для автовакуумирования, 0 мс для обычного вакуума) и предела задержки стоимости автоочистки (-1, т. Е. Используйте системную настройку, равную 200).
Следовательно, обычная очистка ОЧЕНЬ агрессивна, не требует затрат и будет работать настолько быстро и быстро, насколько позволит ваша подсистема ввода-вывода. Он в основном конкурирует с вашей обычной рабочей нагрузкой за пропускную способность ввода-вывода.
Как правило, в вашей ситуации вы можете сделать одно из двух:
Первый: сделать автовакуум более агрессивным. При понижении autovacuum_vacuum_cost_delay с 20 до диапазона от 2 до 5 он будет работать намного быстрее, но при этом не будет слишком сильно мешать.
Второй: запускайте обычный пылесос вручную. Поскольку обычные пылесосы по умолчанию не имеют cost_delay, это будет самым быстрым, но и самым разрушительным.
Решение остается за вами на основе моделей использования и т. Д.
person
Scott Marlowe
schedule
09.01.2018