Очистка
Эта страница переведена при помощи нейросети GigaChat.
Автоматическая очистка
Эти настройки управляют поведением функции автоматического удаления мусора. Подробнее смотрите раздел «Демон автоматической очистки» для получения дополнительной информации. Обратите внимание, что многие из этих настроек могут быть переопределены на уровне отдельных таблиц, подробнее смотрите Параметры хранения.
autovacuum (boolean)
Управляет тем, должен ли сервер запускать демон автозагрузки автоматического удаления мусора. Это включено по умолчанию, однако, также должна быть включена функция учета количества операций, чтобы автоматическое удаление мусора работало. Этот параметр можно установить только в файле postgresql.conf или в командной строке сервера, однако, автоматическая очистка может быть отключена для отдельных таблиц путем изменения параметров хранения таблицы.
Обратите внимание, что даже когда этот параметр отключен, система запустит процессы автоматического удаления мусора, если это необходимо для предотвращения оборачивания идентификатора транзакции. Подробнее смотрите раздел Предотвращение сбоев при оборачивании идентификаторов транзакций для получения дополнительной информации.
autovacuum_max_workers (integer)
Задает максимальное количество процессов autovacuum (кроме автозагрузчика autovacuum), которые могут выполняться одновременно. По умолчанию это три. Этот параметр можно задать только при запуске сервера.
autovacuum_naptime (integer)
Задает минимальную задержку между запусками autovacuum для любой заданной базы данных. В каждом цикле демон проверяет базу данных и выдает команды VACUUM и ANALYZE, если это необходимо для таблиц в этой базе данных. Если это значение указано без единиц измерения, оно принимается за секунды. По умолчанию одна минута (1min). Этот параметр может быть установлен только в файле postgresql.conf или в командной строке сервера.
autovacuum_vacuum_threshold (integer)
Задает минимальное количество обновленных или удаленных кортежей, необходимых для запуска VACUUM в любой таблице. По умолчанию используется 50 кортежей. Этот параметр можно установить только в файле postgresql.conf или в командной строке сервера, но настройка может быть переопределена для отдельных таблиц путем изменения параметров хранения таблицы.
autovacuum_vacuum_insert_threshold (integer)
Задает количество вставляемых кортежей, необходимое для запуска VACUUM в любой таблице. По умолчанию используется 1000 кортежей. Если указано -1, autovacuum не будет инициировать операцию 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 миллионов транзакций. Этот параметр можно установить только при запуске сервера, но его можно уменьшить для отдельных таблиц путем изменения параметров хранения таблиц. Для получения дополнительной информации подробнее смотрите раздел Предотвращение сбоев из-за оборачивания идентификаторов транзакций.
autovacuum_multixact_freeze_max_age (integer)
Задает максимальный возраст (в мультитранзакциях), которого может достичь поле pg_class.relminmxid таблицы, прежде чем операция VACUUM будет принудительно выполнена для предотвращения оборачивания идентификатора мультитранзакции внутри таблицы. Обратите внимание, что система запустит процессы автостарта даже при отключенной функции автовакуума.
Вакуумная обработка multixacts также позволяет удалять старые файлы из подкаталогов pg_multixact/members и pg_multixact/offsets, что объясняет относительно низкий порог в 400 миллионов multixacts по умолчанию. Этот параметр можно установить только при запуске сервера, но его значение может быть уменьшено для отдельных таблиц путем изменения параметров хранения таблицы. Дополнительную информацию подробнее смотрите в разделе Multixacts и Wraparound.
autovacuum_vacuum_cost_delay (floating point)
Задает значение задержки затрат, которое будет использоваться в автоматических операциях VACUUM. Если указано -1, используется обычное значение vacuum_cost_delay. Если это значение указывается без единиц измерения, оно принимается за миллисекунды. Значение по умолчанию составляет 2 миллисекунды. Этот параметр можно задать только в файле postgresql.conf или в командной строке сервера, однако настройку можно переопределить для отдельных таблиц, изменив параметры хранения таблицы.
autovacuum_vacuum_cost_limit (integer)
Задает предельное значение стоимости, которое будет использоваться в автоматических операциях VACUUM. Если указано -1 (что является значением по умолчанию), используется обычное значение vacuum_cost_limit. Обратите внимание, что значение распределяется пропорционально между работающими рабочими процессами autovacuum, если их больше одного, так что сумма ограничений для каждого рабочего процесса не превышает значение этой переменной. Этот параметр можно задать только в файле postgresql.conf или в командной строке сервера, однако настройку можно переопределить для отдельных таблиц, изменив параметры хранения таблицы.
Отложенная очистка на основе затрат
Во время выполнения команд VACUUM и ANALYZE система ведет внутренний счетчик оценочной стоимости различных операций ввода-вывода. При достижении лимита (vacuum_cost_limit) процесс приостанавливается на время, заданное vacuum_cost_delay, затем сбрасывает счетчик и продолжает работу.
Цель функции — позволить администраторам снизить влияние этих команд на параллельную активность в БД. Во многих случаях не критично, чтобы команды обслуживания завершались быстро, но важно, чтобы они не мешали другим операциям. Задержка на основе стоимости предоставляет такой механизм.
По умолчанию для вручную запущенных VACUUM эта функция отключена. Для включения установите vacuum_cost_delay в ненулевое значение.
vacuum_cost_delay (floating point)
Время приостановки процесса при превышении лимита стоимости. Если единицы не указаны — миллисекунды. По умолчанию — 0 (функция отключена). Положительные значения включают механизм.
При использовании механизма адекватные значения обычно очень малы — менее 1 мс. Хотя допускаются дробные значения, на старых платформах такие задержки могут не измеряться точно. В таких случаях для увеличения потребления ресурсов сверх уровня 1 мс потребуется корректировка других параметров стоимости. Тем не менее, держите vacuum_cost_delay минимальным, который платформа может стабильно измерять — большие задержки неэффективны.
vacuum_cost_page_hit (integer)
Оценочная стоимость вакуумирования буфера, найденного в общем кэше буферов. Представляет стоимость блокировки пула буферов, поиска в хэш-таблице и сканирования содержимого страницы. По умолчанию — 1.
vacuum_cost_page_miss (integer)
Оценочная стоимость вакуумирования буфера, который нужно прочитать с диска. Включает блокировку пула, поиск в хэш-таблице, чтение блока и сканирование. По умолчанию — 2.
vacuum_cost_page_dirty (integer)
Оценочная стоимость, начисляемая при модификации вакуумом ранее чистой страницы. Представляет дополнительный ввод-вывод для сброса «грязной» страницы на диск. По умолчанию — 20.
vacuum_cost_limit (integer)
Накопленная стоимость, при достижении которой процесс вакуумирования приостанавливается на vacuum_cost_delay. По умолчанию — 200.
Некоторые операции удерживают критические блокировки и должны завершаться как можно быстрее. Задержки на основе стоимости не применяются во время таких операций, поэтому стоимость может накопиться значительно выше указанного лимита. Чтобы избежать излишне долгих задержек, фактическая задержка рассчитывается как:
vacuum_cost_delay * accumulated_balance / vacuum_cost_limit, с максимумом vacuum_cost_delay * 4.
Поведение по умолчанию
vacuum_truncate (boolean)
Включает или отключает попытку вакуума отсечь пустые страницы в конце таблицы. По умолчанию — true. Если true, VACUUM и autovacuum выполняют усечение, и освобожденное дисковое пространство возвращается ОС.
Усечение требует блокировку ACCESS EXCLUSIVE на таблицу. Параметр TRUNCATE команды VACUUM, если указан, переопределяет это значение. Также может быть переопределено для отдельных таблиц через параметры хранения.
Фиксация (Freezing)
Для обеспечения корректности после обертывания транзакционных идентификаторов PostgreSQL помечает достаточно старые строки как замороженные (frozen). Такие строки видны всем; другим транзакциям не нужно проверять их вставляющий XID для определения видимости. VACUUM отвечает за пометку строк как замороженных. Следующие настройки управляют этим поведением и должны настраиваться в зависимости от скорости потребления XID в системе и паттернов доступа к данным.
vacuum_freeze_table_age (integer)
VACUUM выполняет агрессивное сканирование, если возраст поля pg_class.relfrozenxid таблицы достиг значения этого параметра. Агрессивное сканирование посещает каждую страницу, которая может содержать незафиксированные XID или MXID, а не только те, где могут быть мертвые кортежи. По умолчанию — 150 миллионов транзакций.
Хотя пользователи могут задавать значение от 0 до 2 миллиардов, VACUUM неявно ограничивает эффективное значение до 95% от autovacuum_freeze_max_age, чтобы периодический ручной VACUUM успел выполниться до запуска anti-wraparound autovacuum..
vacuum_freeze_min_age (integer)
Пороговый возраст (в транзакциях), при котором VACUUM решает, фиксировать ли страницы со старыми XID. По умолчанию — 50 миллионов транзакций.
Хотя пользователи могут задавать значение от 0 до 1 миллиарда, VACUUM неявно ограничивает эффективное значение до половины autovacuum_freeze_max_age, чтобы избежать необоснованно частых принудительных autovacuum.
vacuum_failsafe_age (integer)
Максимальный возраст (в транзакциях) поля pg_class.relfrozenxid, после которого VACUUM применяет экстренные меры для предотвращения общесистемного сбоя из-за обертывания транзакционных идентификаторов. Это стратегия последнего рубежа.
При срабатывании failsafe: отменяются задержки на основе стоимости, пропускаются необязательные задачи обслуживания (например, вакуумирование индексов), отключается Buffer Access Strategy, позволяя VACUUM использовать все общие буферы.
По умолчанию — 1,6 миллиарда транзакций. Хотя пользователи могут задавать значение от 0 до 2,1 миллиарда, VACUUM неявно корректирует эффективное значение до не менее 105% от autovacuum_freeze_max_age.
vacuum_multixact_freeze_table_age (integer)
VACUUM выполняет агрессивное сканирование, если возраст поля pg_class.relminmxid таблицы достиг значения этого параметра. По умолчанию — 150 миллионов мультитранзакций.
Хотя пользователи могут задавать значение от 0 до 2 миллиардов, VACUUM неявно ограничивает эффективное значение до 95% от autovacuum_multixact_freeze_max_age.
vacuum_multixact_freeze_min_age (integer)
Пороговый возраст (в мультитранзакциях), при котором VACUUM решает, фиксировать ли страницы со старыми мультитранзакционными идентификаторами. По умолчанию — 5 миллионов мультитранзакций.
Хотя пользователи могут задавать значение от 0 до 1 миллиарда, VACUUM неявно ограничивает эффективное значение до половины autovacuum_multixact_freeze_max_age.
vacuum_multixact_failsafe_age (integer)
Максимальный возраст (в мультитранзакциях) поля pg_class.relminmxid, после которого VACUUM применяет экстренные меры для предотвращения общесистемного сбоя из-за обертывания идентификаторов мультитранзакций.
При срабатывании failsafe отменяются задержки на основе стоимости и пропускаются необязательные задачи обслуживания.
По умолчанию — 1,6 миллиарда мультитранзакций. Хотя пользователи могут задавать значение от 0 до 2,1 миллиарда, VACUUM неявно корректирует эффективное значение до не менее 105% от autovacuum_multixact_freeze_max_age.
vacuum_max_eager_freeze_failure_rate (floating point)
Максимальная доля страниц (от общего числа страниц в отношении), которые VACUUM может просканировать и не суметь пометить как полностью замороженные в карте видимости, прежде чем отключить «жадное» (eager) сканирование. Значение 0 полностью отключает eager scanning. По умолчанию — 0.03 (3%).
При включенном eager scanning в лимит учитываются только неудачные попытки фиксации, а не успешные. Успешные фиксации страниц внутренне ограничены 20% от всех видимых, но не замороженных страниц в отношении. Это помогает распределить накладные расходы между несколькими обычными вакуумами и ограничивает потенциальный ущерб от преждевременной фиксации страниц, которые могут быть изменены до следующего агрессивного вакуума.
Задается только в postgresql.conf или в командной строке, но может быть переопределено для отдельных таблиц через соответствующий параметр хранения таблицы.