notes/db/sql/postgres/feature/vacuum/autovacuum.txt
Ihar Hancharenka 110d3f694c m
2024-03-28 13:27:16 +03:00

46 строки
6.1 KiB
Plaintext

Думаю, вам не стоит напоминать важность процесса AUTOVACUUM для функционирования PostgreSQL? 😉 По этому решили сделать небольшую шпаргалку по его параметрам, чтобы можно было быстро вспомнить какой параметр за что отвечает.
📌 autovacuum_max_workers
Кол-во процессов AUTOVACUUM (не считая основного процесса). Значение по умолчанию 3. Это значит, что 3 процесса autovacuum будут работать над очисткой таблиц одновременно. Изменение параметра требует перезапуска службы PostgreSQL. При первом приближении можно поставить кол-во процессов AUTOVACUUM равным половине кол-ва ядер процессора.
📌 autovacuum_vacuum_cost_limit
Предыдущий параметр не имеет смысла увеличивать без увеличения параметра autovacuum_vacuum_cost_limit. Об этом мы уже писали (https://t.me/pg_guru/195). Напомню, этот параметр отвечает за стоимость работы процесса AUTOVACUUM в условных попугаях. Если мы увеличим кол-во процессов не увеличивая стоимости пропорционально, то наши процессы будут быстро вырабатывать ее и засыпать, что не приведет к лучшей работе AUTOVACUUM.
📌 autovacuum_vacuum_cost_delay
Таймаут работы процесса AUTOVACUUM после того как его процессы выработали свою стоимость (получили зарплату 😁). Нужен для того, чтобы система могла "продышаться", а не быть постоянно занятой очисткой таблиц. Если задавать значение этого параметра без единиц измерения, то оно считается заданным в миллисекундах. Значение по умолчанию 2 миллисекунды.
📌 autovacuum_naptime
Задает время проверки демоном автоочистки на предмет надобности запуска AUTOVACUUM для таблиц базы. Если для значения не задана единица измерения, то оно считается заданным в секундах. Значение по умолчанию 1 минута. Для применения нового значения требуется перезапуск службы PostgreSQL.
📌 autovacuum_vacuum_threshold
Кол-во измененных или удаленных строк, при котором срабатывает AUTOVACUUM. Параметр может быть установлен как глобально в файле postgresql.conf, так и индивидуально для отдельно взятой таблицы. Значение по умолчанию 50.
📌 autovacuum_vacuum_scale_factor
Это процент от общего кол-ва строк таблицы, который будет добавляться к параметру autovacuum_vacuum_threshold. По умолчанию 0.2 (20%). Таким образом получается, что пороговое значение кол-ва строк, при котором сработает AUTOVACUUM на таблицу рассчитывается по формуле:
vacuum_threshold = autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * общее_кол-во_строк_таблицы
Если вам по какой-то причине нужно чтобы AUTOVACUUM сработал на точном кол-ве строк таблицы, вы можете поставить значение параметра autovacuum_vacuum_scale_factor равным нулю и выставить кол-во строк в параметре autovacuum_vacuum_threshold.
📌 autovacuum_vacuum_insert_threshold
Это кол-во вставленных (INSERT) строк, при котором сработает AUTOVACUUM на таблице. Этот параметр появился с версии PostgreSQL 13. Значение по умолчанию 1 000 строк. Если поставить -1, то VACUUM не будет срабатывать при вставке строк. Этот параметр можно установить глобально или индивидуально для конкретной таблицы.
📌 autovacuum_vacuum_insert_scale_factor
Тоже самое, что и autovacuum_vacuum_scale_factor, но для операций вставки (INSERT). Значение по умолчанию - 0.2 (20%).
📌 autovacuum_analyze_scale_factor и autovacuum_analyze_scale_factor
Здесь смысл такой же как у предыдущих параметров, только для операции ANALYZE.
Это основные параметры ры процесса AUTOVACUUM, которые позволят вам повлиять на его поведение, сделать его работу более агрессивной, или наоборот уменьшить влияние AUTOVACUUM на производительность системы. Настройка этих параметров требует анализа таблиц вашей базы данных и производительности PostgreSQL.
⚠️ За эффективной работой процесса AUTOVACUUM очень важно следить, чтобы в конечном счете не нарваться на Transaction ID Wraparound, о котором мы уже писали. (https://t.me/pg_guru/265)