Этот документ описывает параметры системной конфигурации в категории Write-Ahead Log (WAL).
Примечание!
Для обеспечения стабильности и безопасности системы ручное изменение этих параметров должно выполняться с крайней осторожностью.
Добавляет задержку (в микросекундах) перед запуском сброса WAL COMMIT.
commit_delay. Задержка применяется только в случае, если при подготовке к сбросу существует как минимум commit_siblings (см. ниже) других активных транзакций; в противном случае задержка будет напрасной.synchronous_commit отключён.| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | 0 | 0 ~ 100000 | master; session; reload; superuser |
Минимальное количество одновременно активных транзакций, необходимое для применения commit_delay.
| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | 5 | 0 ~ 1000 | master; session; reload |
Когда этот параметр on, сервер YMatrix записывает полное содержимое каждой страницы в WAL при её первом изменении после контрольной точки.
fsync, хотя и меньше. Этот параметр следует отключать только тогда, когда можно безопасно отключить и fsync.| Тип данных | Значение по умолчанию | Контекст |
|---|---|---|
| boolean | on | segments; system; reload |
Если включено, сервер YMatrix гарантирует, что обновления физически записываются на диск путём вызова системных вызовов fsync() или эквивалентных методов (см. wal_sync_method). Это гарантирует, что кластер базы данных сможет восстановиться в согласованное состояние после сбоя ОС или аппаратного сбоя.
fsync часто улучшает производительность, оно может привести к необратимой коррупции данных при потере питания или сбое системы. Поэтому fsync следует отключать только в случае, если весь кластер базы данных можно легко восстановить из внешних данных.fsync включают: первоначальную загрузку нового кластера базы данных из резервной копии, использование кластера для обработки пакетных данных перед его удалением и повторным созданием, или поддержание только для чтения клона, который часто пересоздаётся и не используется для аварийного переключения. Одних только качественных аппаратных средств недостаточно для обоснования отключения fsync.fsync с off на on все изменённые буферы ядра должны быть принудительно записаны на постоянное хранилище для надёжного восстановления. Это может быть достигнуто при завершении работы кластера, при включении fsync через pg_ctl, во время sync, отмонтировании файловой системы или перезапуске сервера.synchronous_commit для менее критичных транзакций может значительно повысить производительность без риска коррупции данных.full_page_writes (см. выше).| Тип данных | Значение по умолчанию | Контекст |
|---|---|---|
| boolean | on | segments; system; reload |
Управляет уровнем синхронизации. Определяет, должна ли транзакция ждать записи своего записи WAL на диск до возврата клиенту индикатора успешного завершения команды.
on. При установке в off существует задержка между сообщением об успехе клиенту и фактической гарантией того, что транзакция выживет при сбое сервера (максимальная задержка — трижды wal_writer_delay). В отличие от fsync, установка этого параметра в off не рискует несогласованностью базы данных: сбой может потерять некоторые недавно зафиксированные транзакции, но состояние базы данных будет таким, как если бы эти транзакции были полностью отменены. Таким образом, когда производительность важнее полной долговечности транзакций, отключение synchronous_commit может быть эффективной альтернативой.remote_apply основной сервер ожидает, пока текущий синхронный standby подтвердит получение записи коммита, сбросит её на диск и применит транзакцию, чтобы она стала видимой для запросов на standby.on основной сервер ожидает, пока синхронный standby подтвердит получение и сброс записи на диск.remote_write основной сервер ожидает, пока синхронный standby подтвердит получение и запись записи в буфер ОС (но не обязательно сброс на диск).local коммит ожидает только сброса на локальный диск, а не завершения репликации. Это обычно не требуется при использовании синхронной репликации, но предоставлено для полноты.synchronous_standby_names пуст, значения remote_apply, remote_write, on и local обеспечивают один и тот же уровень: ожидание только сброса на локальный диск.| Настройка | Локальная долговечность | Долговечность на standby после сбоя YMatrix | Долговечность на standby после сбоя ОС | Видимость запросов на standby |
|---|---|---|---|---|
| remote_apply | Y | Y | Y | Y |
| on | Y | Y | Y | |
| remote_write | Y | Y | ||
| local | Y | |||
| off |
| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| enum | on | on / off / true / false / yes / no / 1 / 0 / remote_apply / remote_write / local | segments; session; reload |
Объём разделяемой памяти, используемый для данных WAL, ещё не записанных на диск (в единицах блоков WAL, то есть XLOG_BLCKSZ байт).
-1 выбирает размер, равный 1/32 от shared_buffers (около 3%), но не менее 32 КБ и не более размера сегмента WAL (обычно 16 МБ).wal_buffers дают мало преимуществ. Однако установка его в несколько мегабайт может улучшить производительность записи на загруженных серверах, где множество клиентов фиксируют транзакции одновременно.-1 включает автоматическую настройку, которая даёт разумные результаты в большинстве случаев.| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | -1 | -1 ~ INT_MAX/XLOG_BLCKSZ | segments; system; restart |
Включает сжатие полных страниц в WAL.
on, и если full_page_writes также on или во время базовой резервной копии, сервер YMatrix сжимает полные образы страниц, записываемые в WAL. Сжатые образы распаковываются во время воспроизведения WAL.| Тип данных | Значение по умолчанию | Контекст |
|---|---|---|
| boolean | off | segments; session; reload; superuser |
При установке в on новые файлы WAL инициализируются нулями.
off при создании файла записывается только последний байт, чтобы придать файлу ожидаемый размер.| Тип данных | Значение по умолчанию | Контекст |
|---|---|---|
| boolean | on | segments; session; reload; superuser |
Определяет, какая информация записывается в WAL.
replica записывает достаточно данных для архивирования WAL и репликации, включая чтение только для чтения на standby-серверах. minimal исключает все записи, кроме тех, которые необходимы для восстановления после сбоя или немедленного завершения. logical добавляет информацию, необходимую для логического декодирования. Каждый уровень включает всю информацию из более низких уровней.minimal логирование WAL для некоторых операций массовой обработки может быть безопасно пропущено, что ускоряет эти операции. Применимые операции включают: INSERT, UPDATE, DELETE, COPY в таблицы, созданные или усечённые в рамках одной транзакции.archive_mode) и потоковой репликации необходимо использовать replica или более высокий уровень.logical, помимо информации уровня replica, дополнительно регистрируются данные, позволяющие извлекать логические наборы изменений из WAL. Использование logical увеличивает объём WAL, особенно когда много таблиц настроены для REPLICA IDENTITY FULL и выполняется множество операций UPDATE и DELETE.| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| enum | replica | replica / minimal / logical | segments; system; restart |
Выполняет полные записи страниц даже для некритических обновлений.
on, сервер YMatrix записывает полное содержимое дисковой страницы в WAL при её первом изменении после контрольной точки, даже для некритических изменений, таких как обновление битов подсказок.| Тип данных | Значение по умолчанию | Контекст |
|---|---|---|
| boolean | off | segments; system; restart |
Переиспользование файлов WAL.
on файлы WAL переиспользуются путём переименования, избегая создания новых файлов.| Тип данных | Значение по умолчанию | Контекст |
|---|---|---|
| boolean | on | segments; session; reload; superuser |
Метод, используемый для принудительной записи обновлений WAL на диск.
fsync отключён, эта настройка не имеет значения, поскольку обновления файлов WAL не будут принудительно записаны на диск. Возможные значения: open_datasync (запись файла WAL с O_DSYNC), fdatasync (вызов fdatasync() при каждом коммите), fsync (вызов fsync() при каждом коммите), fsync_writethrough (вызов fsync() с директивой write-through), open_sync (запись файла WAL с O_SYNC).open_* также могут использовать O_DIRECT (если доступно).| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| enum | fsync / fdatasync (значение по умолчанию на Linux) | open_datasync / fdatasync / fsync / fsync_writethrough / open_sync | segments; system; reload |
Задаёт частоту сброса WAL писателем WAL в миллисекундах.
wal_writer_delay, если не был пробуждён раньше асинхронным коммитом.wal_writer_delay назад и было сгенерировано менее wal_writer_flush_after байт WAL, WAL записывается только в буфер ОС, но не сбрасывается на диск.wal_writer_delay в значение, не кратное 10, имеет тот же эффект, что и установка в следующее большее кратное 10.| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | 200 | 1 ~ 10000 | segments; system; reload |
Задаёт частоту сброса WAL писателем WAL в единицах блоков WAL (то есть XLOG_BLCKSZ байт).
wal_writer_delay назад и было сгенерировано менее wal_writer_flush_after байт WAL, WAL записывается только в буфер ОС, но не сбрасывается на диск.wal_writer_flush_after установлен в 0, данные WAL всегда немедленно сбрасываются.| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | 1048576/XLOG_BLCKSZ | 0 ~ INT_MAX | segments; system; reload |
Целевая продолжительность завершения контрольной точки.
| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| floating point | 0.5 | 0.0 ~ 1.0 | segments; system; reload |
При записи более этого объема данных во время контрольной точки (в БЛОКАХ) попытайтесь заставить ОС отправить эти записи на нижележащее хранилище.
fsync или при выполнении ОС крупных фоновых операций записи.0 принудительная запись отключена.| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | 0 | 0 ~ 256 | segments; system; reload |
Максимальное время между автоматическими контрольными точками WAL, в секундах.
86400 (т.е. 60 дней).| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | 300 | 30 ~ 86400 | segments; system; reload |
Если контрольные точки происходят чаще, чем этот интервал (в секундах), из-за заполнения сегментов WAL, предупреждение записывается в журнал сервера (указывая, что следует увеличить max_wal_size).
0, чтобы отключить предупреждения. Предупреждение не выдается, если checkpoint_timeout меньше этого значения.| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | 30 | 0 ~ INT_MAX | segments; system; reload |
Максимальный размер (в МБ), до которого WAL может расти между автоматическими контрольными точками WAL.
max_wal_size при высокой нагрузке, сбое checkpoint_timeout или высоком wal_writer_delay.| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | 4096 | 2 ~ INT_MAX/1024 | segments; system; reload |
Минимальный размер WAL (в МБ) между автоматическими контрольными точками WAL.
| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | 320 | 2 ~ INT_MAX/1024 | segments; system; reload |
Локальная shell-команда для архивации завершенного сегмента WAL.
%p в строке заменяется путем к файлу, подлежащему архивации, а %f — именем файла (относительно каталога данных кластера). Для вставки буквального символа % используйте %%. Пример: archive_command = 'cp %p /mnt/server/archivedir/%f'0 при успешном выполнении.archive_mode. Если archive_mode включен, а archive_command — пустая строка (по умолчанию), архивация WAL временно отключена, но сервер продолжает накапливать файлы сегментов WAL, ожидая предоставления команды.archive_command в команду-пустышку, которая всегда возвращает true (например, true в Unix или rem в Windows), эффективно отключает архивацию и нарушает цепочку WAL, необходимую для восстановления из архива, поэтому следует использовать только в редких случаях.| Тип данных | Значение по умолчанию | Контекст |
|---|---|---|
| string | segments; system; reload |
Когда archive_mode включен, завершенные сегменты WAL могут быть отправлены в архивное хранилище через archive_command.
off, доступны два режима: on и always. В нормальном режиме работы между ними нет различий. Однако при установке в always архиватор WAL также активен во время восстановления из архива или в режиме standby. В режиме always все файлы, восстановленные из архива или полученные через потоковую репликацию, снова архивируются.archive_mode и archive_command — независимые переменные, позволяющие изменять archive_command без влияния на режим архивации.wal_level (см. выше) установлен в minimal, archive_mode не может быть включен.| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| enum | off | off / on / always | segments; system; restart |
Принудительное переключение на новый сегмент WAL после этого интервала времени (в секундах).
archive_command вызывается только для завершенных сегментов WAL. Поэтому, если сервер генерирует мало трафика WAL (или редкие всплески), может возникнуть длительная задержка между завершением транзакции и безопасной архивацией. Чтобы ограничить срок жизни неархивированных данных, установите archive_timeout, чтобы принудительно выполнять периодические переключения сегментов WAL.archive_timeout нецелесообразно — оно потребляет избыточное место в архиве. Обычно разумным значением является около одной минуты.0, что отключает эту функцию.| Тип данных | Значение по умолчанию | Диапазон | Контекст |
|---|---|---|---|
| int | 0 | 0 ~ INT_MAX/2 | segments; system; reload |
Эти параметры применяются только в режиме восстановления. Их необходимо сбросить, если планируются дальнейшие операции восстановления.
«Восстановление» включает запуск сервера в режиме standby (резервного сервера) или выполнение восстановления до определенной точки во времени. Обычно режим standby обеспечивает высокую доступность и/или масштабируемость для чтения, а восстановление до определенной точки во времени используется для восстановления после потери данных.
Чтобы запустить сервер в режиме standby, создайте файл с именем standby.signal в каталоге данных. Сервер переходит в режим восстановления и не останавливается при завершении архивных WAL, а пытается продолжить, подключившись к серверу-отправителю, указанному в primary_conninfo, и/или получив новые сегменты WAL через restore_command.
Чтобы запустить сервер в режиме восстановления до определенной точки во времени, создайте файл с именем recovery.signal в каталоге данных. Если присутствуют оба файла standby.signal и recovery.signal, приоритет имеет режим standby. Восстановление до определенной точки во времени завершается после воспроизведения всех архивных WAL или достижения recovery_target.
Shell-команда, выполняемая в каждой точке восстановления.
%r заменяется именем файла, содержащего последнюю доступную точку восстановления — самый ранний файл, который необходимо сохранить для возобновляемого восстановления. Все файлы старше %r можно безопасно удалить. Для вставки буквального символа % используйте %%. Эта информация может использоваться для усечения архива до минимально необходимого объема для текущего восстановления. В одиночных конфигурациях standby часто используется модуль pg_archivecleanup в archive_cleanup_command, например, archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'.| Тип данных | Значение по умолчанию | Контекст |
|---|---|---|
| string | segments; system; reload |
Shell-команда, выполняемая один раз при завершении восстановления.
archive_cleanup_command, любое %r заменяется именем файла, содержащего последнюю доступную точку восстановления.| Тип данных | Значение по умолчанию | Контекст |
|---|---|---|
| string | segments; system; reload |
Локальная shell-команда для извлечения архивированного сегмента WAL из серии файлов WAL.
%p заменяется путем к файлу, подлежащему восстановлению, %f — именем файла (относительно каталога данных кластера). Для вставки буквального символа % используйте %%. Любое %r заменяется именем файла, содержащего последнюю доступную точку восстановления. Пример: restore_command = 'cp /mnt/server/archivedir/%f "%p"'.0 при успешном выполнении. Она будет запрашиваться для имен файлов, отсутствующих в архиве; в таких случаях она должна возвращать ненулевой статус. Пример:restore_command = 'cp /mnt/server/archivedir/%f "%p"'
restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
| Тип данных | Значение по умолчанию | Контекст |
|---|---|---|
| string | segments; system; restart |
Эти параметры используются только во время целенаправленных операций восстановления. По умолчанию восстановление продолжается до конца журнала WAL. Эти параметры позволяют указать более раннюю точку остановки.
Примечание!
Может быть использовано не более одного изrecovery_target,recovery_target_name,recovery_target_time,recovery_target_xidиrecovery_target_lsn. Использование нескольких в конфигурационном файле приведет к ошибке.
recovery_targetЭтот параметр указывает, что восстановление должно завершиться сразу после достижения согласованного состояния.
immediate — единственное допустимое значение на данный момент.| Тип данных | Значение по умолчанию | Диапазон | Область настройки |
|---|---|---|---|
| string | immediate | segments; system; restart |
recovery_target_actionЗадает действие, которое сервер должен выполнить немедленно после достижения цели восстановления.
pause, что означает паузу восстановления. promote означает завершение восстановления и запуск сервера для приема подключений. shutdown означает остановку сервера после достижения цели восстановления.pause полезна, если цель восстановления является желаемой точкой остановки, позволяя выполнять запросы к базе данных. Пауза может быть возобновлена с помощью pg_wal_replay_resume(), что завершит восстановление. Если цель восстановления не является желаемой точкой остановки, остановите сервер, измените настройку цели восстановления на более позднюю и перезапустите для продолжения восстановления.shutdown может быть полезна для подготовки экземпляра в желаемой точке воспроизведения. Экземпляр все еще сможет воспроизводить дополнительные записи WAL (и на самом деле будет вынужден воспроизводить записи WAL с последней контрольной точки в следующий раз при запуске).recovery_target_action в shutdown файл recovery.signal не будет удален. Любая последующая загрузка приведет к немедленной остановке, если конфигурация не изменена или файл recovery.signal не удален вручную.hot_standby не включен, поведение promote совпадает с pause.| Тип данных | Значение по умолчанию | Диапазон | Область настройки |
|---|---|---|---|
| enum | pause | pause / promote / shutdown | segments; system; restart |
recovery_target_inclusiveУказывает, останавливается ли восстановление после (on) или до (off) указанной цели восстановления.
recovery_target_lsn, recovery_target_time или recovery_target_xid.| Тип данных | Значение по умолчанию | Область настройки |
|---|---|---|
| boolean | on | segments; system; restart |
recovery_target_lsnЗадает LSN WAL, до которого будет продолжаться восстановление.
recovery_target_inclusive (см. выше).pg_lsn.| Тип данных | Значение по умолчанию | Область настройки |
|---|---|---|
pg_lsn |
segments; system; restart |
recovery_target_nameЗадает именованную точку восстановления (созданную с помощью pg_create_restore_point()), до которой будет выполняться восстановление.
| Тип данных | Значение по умолчанию | Область настройки |
|---|---|---|
| string | segments; system; restart |
recovery_target_timeЗадает временную метку, до которой будет выполняться восстановление.
recovery_target_inclusive (см. выше).| Тип данных | Значение по умолчанию | Область настройки |
|---|---|---|
| timestamp | segments; system; restart |
recovery_target_timelineЗадает восстановление в конкретную временную линию.
current восстанавливает вдоль той же временной линии, которая использовалась при создании базовой резервной копии; latest восстанавливает до последней найденной временной линии в архиве, что полезно для резервных серверов.| Тип данных | Значение по умолчанию | Диапазон | Область настройки |
|---|---|---|---|
| string | latest | current / latest / Timeline ID | segments; system; restart |
recovery_target_xidЗадает идентификатор транзакции, на котором восстановление будет остановлено.
recovery_target_inclusive (см. выше).| Тип данных | Значение по умолчанию | Область настройки |
|---|---|---|
| string | сегменты; система; перезапуск |