В этом учебном пособии по PostgreSQL более подробно рассказывается о демоне AUTOVACUUM.
Описание
Представленный в PostgreSQL 8.1 демон AUTOVACUUM - это дополнительная функция, которая автоматически пылесосит базу данных, поэтому вам не нужно вручную запускать оператор VACUUM. Демон AUTOVACUUM включен в конфигурации по умолчанию.
Демон AUTOVACUUM состоит из нескольких процессов, которые восстанавливают хранилище, удаляя устаревшие данные или кортежи из базы данных. Он проверяет таблицы, в которых имеется значительное количество вставленных, обновленных или удаленных записей, и пылесосит эти таблицы на основе приведенных ниже параметров конфигурации.
Настройки по умолчанию
Настройки AUTOVACUUM для PostgreSQL можно найти в файле postgresql.conf и контролировать, когда и как работает демон. Ниже приведен пример этих настроек:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#------------------------------------------------------------------------------ # AUTOVACUUM PARAMETERS #------------------------------------------------------------------------------ autovacuum = on # Включить подпроцесс autovacuum? 'on' # требует, чтобы track_counts также был включен. log_autovacuum_min_duration = -1 # -1 отключает, 0 записывает все действия и # их длительности,> только 0 журналов # действий, выполняющих наименьшее # количество миллисекунд autovacuum_max_workers = 3 # максимальное количество подпроцессов autovacuum # (изменение требует перезагрузки) autovacuum_naptime = 1min # время между autovacuum запуском autovacuum_vacuum_threshold = 50 # мин количество обновлений строк перед vacuum autovacuum_analyze_threshold = 50 # мин количество обновлений строк перед анализом autovacuum_vacuum_scale_factor = 0.2 # доля размера таблицы до vacuum autovacuum_analyze_scale_factor = 0.1 # доля размера таблицы перед анализом autovacuum_freeze_max_age = 200000000 # максимальный XID длительность до принудительного vacuum # (изменение требует перезагрузки) autovacuum_multixact_freeze_max_age = 400000000 # максимальная многофакторная длительность # до принудительного vacuum # (изменение требует перезагрузки) autovacuum_vacuum_cost_delay = 20ms # по умолчанию vacuum задержка стоимости для # autovacuum, в миллисекундах; # -1 означает использование vacuum_cost_delay autovacuum_vacuum_cost_limit = -1 # предельная стоимость vacuum по умолчанию для # autovacuum, -1 означает использование # vacuum_cost_limit |
Текущие настройки
Вы можете просмотреть настройки AUTOVACUUM одним из двух способов. Вы можете открыть файл postgresql.conf и просмотреть параметры AUTOVACUUM (как описано выше). Или, если вы вошли в базу данных, вы можете выполнить следующий запрос:
1 2 3 |
SELECT * FROM pg_settings WHERE name LIKE 'autovacuum%' |
Этот запрос вернет текущие системные настройки для демона AUTOVACUUM, но важно отметить, что вы не можете обновить эти настройки с помощью запроса.
Обновить настройки
Чтобы изменить настройки для демона AUTOVACUUM, вам необходимо найти и отредактировать настройки, хранящиеся в файле postgresql.conf. Расположение файла postgresql.conf зависит от используемой системы.
После того как вы отредактировали настройки в файле postgresql.conf, вам потребуется перезапустить базу данных, чтобы изменения вступили в силу.
Отключить AUTOVACUUM для таблицы
Когда системные настройки для AUTOVACUUM включены, вы можете отключить AUTOVACUUM для определенной таблицы, если выберете. Это делается путем запуска запроса в базе данных.
Синтаксис для отключения AUTOVACUUM для таблицы в PostgreSQL:
1 |
ALTER TABLE table_name SET (autovacuum_enabled = false); |
- table_name
- Таблица, к которой вы не хотите применить autovacuum.
Например:
1 |
ALTER TABLE products SET (autovacuum_enabled = false); |
В этом примере демон AUTOVACUUM будет переопределен, чтобы таблица products не очищалась автоматически.
Если вы не уверены, была ли отключена функция AUTOVACUUM в таблице, вы можете выполнить следующий запрос:
1 2 3 |
SELECT reloptions FROM pg_class WHERE relname = 'products'; |
Это вернет параметр AUTOVACUUM для таблицы products. Если AUTOVACUUM был отключен, ваш запрос будет возвращать что-то вроде этого:
1 2 3 4 |
reloptions ---------------------------- {autovacuum_enabled=false} (1 row) |
В этом примере для таблицы products для autovacuum_enabled установлено значение false. Это означает, что демон AUTOVACUUM не будет пытаться очистить таблицу products.