Настройка параметров сервера автоматической очистки
Процесс вакуума настраивается с помощью параметров сервера autovacuum , которые позволяют оптимизировать процесс вакуума для рабочей нагрузки. На портале Azure выберите свой сервер Базы данных Azure для PostgreSQL, а затем в меню слева выберите Параметры сервера. В поле поиска введите autovacuum. Кроме того, можно использовать SQL для запроса представлений системного каталога, чтобы найти текущую конфигурацию автовакуума с помощью следующего запроса.
SELECT *
FROM pg_settings
WHERE "name" LIKE '%autovacuum%';
Наименование параметра | По умолчанию. | Description |
---|---|---|
autovacuum | DNS | Включает и отключает серверный процесс автоматической очистки. Автоматическая очистка должна быть всегда включена. |
autovacuum_analyze_scale_factor | 0,1 | Указывает долю размера таблицы, добавляемую к autovacuum_vacuum_threshold при определении необходимости очистки. Например, значение 0,2 составляет 20 % от размера таблицы. |
autovacuum_analyze_threshold | 50 | Количество вставленных, обновленных или удаленных строк, необходимых для активации процесса анализа для любой таблицы. |
autovacuum_freeze_max_age | 200000000 | Максимальная длительность (в транзакциях) перед активацией автоматической очистки в таблице для предотвращения обхода идентификатора транзакции. |
autovacuum_max_workers | 3 | Максимальное количество автоматических очисток, запущенных в одно время любым способом, кроме средства запуска очистки. |
autovacuum_multixact_freeze_max_age | 400 000 000 | Максимальная длительность (в идентификаторах multixact) перед активацией автоматической очистки в таблице для предотвращения обхода идентификатора multixact. |
autovacuum_naptime | 60 с | Задержка между автоматическими очистками в базе данных. В ходе каждого сеанса управляющая программа просматривает базу данных и по мере необходимости вызывает команды VACUUM и ANALYZE для таблиц в этой базе данных. |
autovacuum_vacuum_cost_limit | -1 | Максимальная стоимость автоматической очистки. Если задано значение –1 (по умолчанию), будет использоваться обычное значение параметра vacuum_cost_limit. При использовании нескольких рабочих ролей значение распределяется пропорционально между работающими рабочими рабочая роль автовакума. Сумма для каждой рабочей роли не может превышать значение этой переменной. |
autovacuum_vacuum_insert_threshold | 1000 | Количество вставленных строк, которые активируют вакуум для любой таблицы. |
autovacuum_vacuum_scale_factor | 0,2 | Используется с autovacuum_vacuum_threshold. Доля таблицы, используемая при определении необходимости очистки. |
autovacuum_vacuum_threshold | 50 | Наименьшее количество обновленных, вставленных или удаленных строк, необходимое для активации очистки в таблице. |
autovacuum_vacuum_insert_scale_factor | 0,2 | Указывает долю размера таблицы, добавляемую к autovacuum_vacuum_insert_threshold для активации очистки. |
autovacuum_work_mem | –1 КБ | Максимальная память, которую может использовать каждый процесс автовакума. |
log_autovacuum_min_duration | -1 | Время в миллисекундах, зарегистрированное действиями автовакуума. |
Очистку не следует выполнять слишком часто или слишком редко. Оптимальная частота зависит от рабочей нагрузки. Проверьте каждый из параметров автоматической очистки, чтобы определить наилучшую частоту для своей рабочей нагрузки. Стоимость очистки зависит от следующих факторов:
- Страницы данных блокируются при запуске очистки.
- Очистка потребляет время и память для вычислений.
Оптимизация очистки на уровне таблицы
В Базе данных Azure для PostgreSQL параметры автоматической очистки можно задать на уровне таблицы. Если некоторые таблицы обновляются больше, чем другие, это может повысить производительность. Далее представлен пример настройки автоматической очистки на уровне таблицы:
ALTER TABLE mytable SET (autovacuum_vacuum_threshold = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.1);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_delay = 10);
На уровне таблицы автоматическая очистка является синхронным процессом. Чем больше процент мертвых кортежей, что таблица имеет, тем больше "затраты", вызванные процессом автовакуума.
Таблицы с высокой частотой обновлений рекомендуется разделить на несколько таблиц. Это разделение помогает параллелизировать автовакум и уменьшить "затраты" для любой таблицы. Также можно увеличить количество одновременно запущенных средств автоматической очистки.