19.10. Автоматическая очистка #
Эти параметры управляют поведением механизма автоочистки. За дополнительными сведениями обратитесь к Подразделу 24.1.6. Заметьте, что многие из этих параметров могут быть переопределены на уровне таблиц; см. Параметры хранения.
autovacuum(boolean) #Управляет состоянием демона, запускающего автоочистку. По умолчанию он включён, но чтобы автоочистка работала, нужно также включить track_counts. Задать этот параметр можно только в
postgresql.confили в командной строке при запуске сервера. Однако автоочистку можно отключить для отдельных таблиц, изменив их параметры хранения.Заметьте, что даже если этот параметр отключён, система будет запускать процессы автоочистки, когда это необходимо для предотвращения зацикливания идентификаторов транзакций. За дополнительными сведениями обратитесь к Подразделу 24.1.5.
autovacuum_max_workers(integer) #Задаёт максимальное число процессов автоочистки (не считая процесс, запускающий автоочистку), которые могут выполняться одновременно. По умолчанию это число равно трём. Задать этот параметр можно только при запуске сервера.
autovacuum_naptime(integer) #Задаёт минимальную задержку между двумя запусками автоочистки для отдельной базы данных. Демон автоочистки проверяет базу данных через заданный интервал времени и выдаёт команды
VACUUMиANALYZE, когда это требуется для таблиц этой базы. Если это значение задаётся без единиц измерения, оно считается заданным в секундах. По умолчанию задержка равна одной минуте (1min). Этот параметр можно задать только вpostgresql.confили в командной строке при запуске сервера.autovacuum_vacuum_threshold(integer) #Задаёт минимальное число изменённых или удалённых кортежей, при котором будет выполняться
VACUUMдля отдельно взятой таблицы. Значение по умолчанию — 50 кортежей. Задать этот параметр можно только вpostgresql.confили в командной строке при запуске сервера. Однако данное значение можно переопределить для избранных таблиц, изменив их параметры хранения.autovacuum_vacuum_insert_threshold(integer) #Задаёт число добавленных кортежей, при достижении которого будет выполняться
VACUUMдля отдельно взятой таблицы. Значение по умолчанию — 1000 кортежей. При значении -1 процедура автоочистки не будет производить операцииVACUUMс таблицами в зависимости от числа добавленных строк. Задать этот параметр можно только в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_vacuum_insert_scale_factor(floating point) #Задаёт процент от размера таблицы, который будет добавляться к
autovacuum_vacuum_insert_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_xact, поэтому значение по умолчанию сравнительно мало — 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(floating point) #Задаёт задержку при превышении предела стоимости, которая будет применяться при автоматических операциях
VACUUM. Если это значение задаётся без единиц измерения, оно считается заданным в миллисекундах. При значении -1 применяется обычная задержка vacuum_cost_delay. Значение по умолчанию — 2 миллисекунды. Задать этот параметр можно только в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.
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. If this value is specified without units, it is taken as seconds. 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_vacuum_insert_threshold(integer) #Specifies the number of inserted tuples needed to trigger a
VACUUMin any one table. The default is 1000 tuples. If -1 is specified, autovacuum will not trigger aVACUUMoperation on any tables based on the number of inserts. 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_vacuum_insert_scale_factor(floating point) #Specifies a fraction of the table size to add to
autovacuum_vacuum_insert_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_xactsubdirectory, 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(floating point) #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. If this value is specified without units, it is taken as milliseconds. The default value is 2 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.