19.10. Автоматическая очистка
Эти параметры управляют поведением механизма автоочистки. За дополнительными сведениями обратитесь к Подразделу 24.1.6. Заметьте, что многие из этих параметров могут быть переопределены на уровне таблиц; см. Параметры хранения.
autovacuum(boolean)Управляет состоянием демона, запускающего автоочистку. По умолчанию он включён, но чтобы автоочистка работала, нужно также включить track_counts. Задать этот параметр можно только в
postgresql.confили в командной строке при запуске сервера. Однако автоочистку можно отключить для отдельных таблиц, изменив их параметры хранения.Заметьте, что даже если этот параметр отключён, система будет запускать процессы автоочистки, когда это необходимо для предотвращения зацикливания идентификаторов транзакций. За дополнительными сведениями обратитесь к Подразделу 24.1.5.
log_autovacuum_min_duration(integer)Задаёт время выполнения действия автоочистки (в миллисекундах), при превышении которого информация об этом действии записывается в протокол. При нулевом значении в протоколе фиксируются все действия автоочистки. Значение -1 (по умолчанию) отключает протоколирование действий автоочистки. Например, если задать значение
250ms, в протоколе будут фиксироваться все операции автоматической очистки и анализа, выполняемые дольше 250 мс. Кроме того, когда этот параметр имеет любое значение, отличное от-1, в протокол будет записываться сообщение в случае пропуска действия автоочистки из-за конфликтующей блокировки. Таким образом, включение этого параметра позволяет отслеживать активность автоочистки. Задать этот параметр можно только вpostgresql.confили в командной строке при запуске сервера. Однако его можно переопределить для отдельных таблиц, изменив их параметры хранения.autovacuum_max_workers(integer)Задаёт максимальное число процессов автоочистки (не считая процесс, запускающий автоочистку), которые могут выполняться одновременно. По умолчанию это число равно трём. Задать этот параметр можно только при запуске сервера.
autovacuum_naptime(integer)Задаёт минимальную задержку между двумя запусками автоочистки для отдельной базы данных. Демон автоочистки проверяет базу данных через заданный интервал времени и выдаёт команды
VACUUMиANALYZE, когда это требуется для таблиц этой базы. Задержка задаётся в секундах и по умолчанию равна одной минуте (1min). Этот параметр можно задать только вpostgresql.confили в командной строке при запуске сервера.autovacuum_vacuum_threshold(integer)Задаёт минимальное число изменённых или удалённых кортежей, при котором будет выполняться
VACUUMдля отдельно взятой таблицы. Значение по умолчанию — 50 кортежей. Задать этот параметр можно только вpostgresql.confили в командной строке при запуске сервера. Однако данное значение можно переопределить для избранных таблиц, изменив их параметры хранения.autovacuum_analyze_threshold(integer)Задаёт минимальное число добавленных, изменённых или удалённых кортежей, при котором будет выполняться
ANALYZEдля отдельно взятой таблицы. Значение по умолчанию — 50 кортежей. Этот параметр можно задать только вpostgresql.confили в командной строке при запуске сервера. Однако данное значение можно переопределить для избранных таблиц, изменив их параметры хранения.autovacuum_vacuum_scale_factor(floating point)Задаёт процент от размера таблицы, который будет добавляться к
autovacuum_vacuum_thresholdпри выборе порога срабатывания командыVACUUM. Значение по умолчанию — 0.2 (20% от размера таблицы). Задать этот параметр можно только вpostgresql.confили в командной строке при запуске сервера. Однако данное значение можно переопределить для избранных таблиц, изменив их параметры хранения.autovacuum_analyze_scale_factor(floating point)Задаёт процент от размера таблицы, который будет добавляться к
autovacuum_analyze_thresholdпри выборе порога срабатывания командыANALYZE. Значение по умолчанию — 0.1 (10% от размера таблицы). Задать этот параметр можно только вpostgresql.confили в командной строке при запуске сервера. Однако данное значение можно переопределить для избранных таблиц, изменив их параметры хранения.autovacuum_freeze_max_age(integer)Задаёт максимальный возраст (в транзакциях) для поля
pg_class.relfrozenxidнекоторой таблицы, при достижении которого будет запущена операцияVACUUMдля предотвращения зацикливания идентификаторов транзакций в этой таблице. Заметьте, что система запустит процессы автоочистки для предотвращения зацикливания, даже если для всех других целей автоочистка отключена.При очистке могут также удаляться старые файлы из подкаталога
pg_clog, поэтому значение по умолчанию сравнительно мало — 200 миллионов транзакций. Задать этот параметр можно только при запуске сервера, но для отдельных таблиц его можно определить по-другому, изменив их параметры хранения. За дополнительными сведениями обратитесь к Подразделу 24.1.5.autovacuum_multixact_freeze_max_age(integer)Задаёт максимальный возраст (в мультитранзакциях) для поля
pg_class.relminmxidтаблицы, при достижении которого будет запущена операцияVACUUMдля предотвращения зацикливания идентификаторов мультитранзакций в этой таблице. Заметьте, что система запустит процессы автоочистки для предотвращения зацикливания, даже если для всех других целей автоочистка отключена.При очистке мультитранзакций могут также удаляться старые файлы из подкаталогов
pg_multixact/membersиpg_multixact/offsets, поэтому значение по умолчанию сравнительно мало — 400 миллионов мультитранзакций. Этот параметр можно задать только при запуске сервера, но для отдельных таблиц его можно определить по-другому, изменив их параметры хранения. За дополнительными сведениями обратитесь к Подразделу 24.1.5.1.autovacuum_vacuum_cost_delay(integer)Задаёт задержку при превышении предела стоимости, которая будет применяться при автоматических операциях
VACUUM. При значении -1 применяется обычная задержка vacuum_cost_delay. Значение по умолчанию — 20 миллисекунд. Задать этот параметр можно только вpostgresql.confили в командной строке при запуске сервера. Однако его можно переопределить для отдельных таблиц, изменив их параметры хранения.autovacuum_vacuum_cost_limit(integer)Задаёт предел стоимости, который будет учитываться при автоматических операциях
VACUUM. При значении -1 (по умолчанию) применяется обычное значение vacuum_cost_limit. Заметьте, что это значение распределяется пропорционально среди всех работающих процессов автоочистки, если их больше одного, так что сумма ограничений всех процессов никогда не превосходит данный предел. Задать этот параметр можно только вpostgresql.confили в командной строке при запуске сервера. Однако его можно переопределить для отдельных таблиц, изменив их параметры хранения.
19.10. Automatic Vacuuming
These settings control the behavior of the autovacuum feature. Refer to Section 24.1.6 for more information. Note that many of these settings can be overridden on a per-table basis; see Storage Parameters.
autovacuum(boolean)Controls whether the server should run the autovacuum launcher daemon. This is on by default; however, track_counts must also be enabled for autovacuum to work. This parameter can only be set in the
postgresql.conffile or on the server command line; however, autovacuuming can be disabled for individual tables by changing table storage parameters.Note that even when this parameter is disabled, the system will launch autovacuum processes if necessary to prevent transaction ID wraparound. See Section 24.1.5 for more information.
log_autovacuum_min_duration(integer)Causes each action executed by autovacuum to be logged if it ran for at least the specified number of milliseconds. Setting this to zero logs all autovacuum actions. Minus-one (the default) disables logging autovacuum actions. For example, if you set this to
250msthen all automatic vacuums and analyzes that run 250ms or longer will be logged. In addition, when this parameter is set to any value other than-1, a message will be logged if an autovacuum action is skipped due to the existence of a conflicting lock. Enabling this parameter can be helpful in tracking autovacuum activity. This parameter can only be set in thepostgresql.conffile or on the server command line; but the setting can be overridden for individual tables by changing table storage parameters.autovacuum_max_workers(integer)Specifies the maximum number of autovacuum processes (other than the autovacuum launcher) that may be running at any one time. The default is three. This parameter can only be set at server start.
autovacuum_naptime(integer)Specifies the minimum delay between autovacuum runs on any given database. In each round the daemon examines the database and issues
VACUUMandANALYZEcommands as needed for tables in that database. The delay is measured in seconds, and the default is one minute (1min). This parameter can only be set in thepostgresql.conffile or on the server command line.autovacuum_vacuum_threshold(integer)Specifies the minimum number of updated or deleted tuples needed to trigger a
VACUUMin any one table. The default is 50 tuples. This parameter can only be set in thepostgresql.conffile or on the server command line; but the setting can be overridden for individual tables by changing table storage parameters.autovacuum_analyze_threshold(integer)Specifies the minimum number of inserted, updated or deleted tuples needed to trigger an
ANALYZEin any one table. The default is 50 tuples. This parameter can only be set in thepostgresql.conffile or on the server command line; but the setting can be overridden for individual tables by changing table storage parameters.autovacuum_vacuum_scale_factor(floating point)Specifies a fraction of the table size to add to
autovacuum_vacuum_thresholdwhen deciding whether to trigger aVACUUM. The default is 0.2 (20% of table size). This parameter can only be set in thepostgresql.conffile or on the server command line; but the setting can be overridden for individual tables by changing table storage parameters.autovacuum_analyze_scale_factor(floating point)Specifies a fraction of the table size to add to
autovacuum_analyze_thresholdwhen deciding whether to trigger anANALYZE. The default is 0.1 (10% of table size). This parameter can only be set in thepostgresql.conffile or on the server command line; but the setting can be overridden for individual tables by changing table storage parameters.autovacuum_freeze_max_age(integer)Specifies the maximum age (in transactions) that a table's
pg_class.relfrozenxidfield can attain before aVACUUMoperation is forced to prevent transaction ID wraparound within the table. Note that the system will launch autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled.Vacuum also allows removal of old files from the
pg_clogsubdirectory, which is why the default is a relatively low 200 million transactions. This parameter can only be set at server start, but the setting can be reduced for individual tables by changing table storage parameters. For more information see Section 24.1.5.autovacuum_multixact_freeze_max_age(integer)Specifies the maximum age (in multixacts) that a table's
pg_class.relminmxidfield can attain before aVACUUMoperation is forced to prevent multixact ID wraparound within the table. Note that the system will launch autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled.Vacuuming multixacts also allows removal of old files from the
pg_multixact/membersandpg_multixact/offsetssubdirectories, which is why the default is a relatively low 400 million multixacts. This parameter can only be set at server start, but the setting can be reduced for individual tables by changing table storage parameters. For more information see Section 24.1.5.1.autovacuum_vacuum_cost_delay(integer)Specifies the cost delay value that will be used in automatic
VACUUMoperations. If -1 is specified, the regular vacuum_cost_delay value will be used. The default value is 20 milliseconds. This parameter can only be set in thepostgresql.conffile or on the server command line; but the setting can be overridden for individual tables by changing table storage parameters.autovacuum_vacuum_cost_limit(integer)Specifies the cost limit value that will be used in automatic
VACUUMoperations. If -1 is specified (which is the default), the regular vacuum_cost_limit value will be used. Note that the value is distributed proportionally among the running autovacuum workers, if there is more than one, so that the sum of the limits for each worker does not exceed the value of this variable. This parameter can only be set in thepostgresql.conffile or on the server command line; but the setting can be overridden for individual tables by changing table storage parameters.