PostgreSQL Ошибка: requested wal segment has already been removed

PostgreSQL Ошибка: requested wal segment has already been removed

Коллеги всем привет.

Если вы используете в своей роботе потоковую репликацию в базе данных PostgreSQL без непрерывного архивирования WAL журналов, то сервер базы данных через время может повторно использовать эти старые сегменты WAL до того, как резервный сервер получит их. Если резервный сервер (Standby), подключенный к отправляющему серверу (Primary) очень сильно отстанет от отправляющего сервера (Primary), то отправляющий сервер (Primary) может удалить сегмент WAL, все еще необходимые резервному серверу (Standby), и в этом случае соединение репликации будет разорвано.

В таком результате соединения между отправляющем (Primary) и резервным (Standby) сервером в конечном итоге перестанут работать, и на резервном сервере базе данных в лог журналах вы увидите ошибку - "requested WAL segment 00000002000000170000006A has already been removed".

 

Такой проблемы можно избежать, для этого нужно сделать так, чтобы база данных Primary сохраняла как можно больше своих wal сегментов. В более старых версия базы данных PostgreSQL а именно до 14 версии за это отвечает параметр wal_keep_size, а с версии 14 версии и выше отвечает параметр wal_keep_segments. Параметры wal_keep_size и wal_keep_segments указывают на минимальный размер прошлых сегментов файлов журнала, хранящихся в директории pg_wal, на случай, если резервному серверу потребуется извлечь их для потоковой репликации.

По умолчанию параметры имеют значения 0, и это значит система не хранит никаких дополнительных WAL сегментов для резервных целей, поэтому количество старых сегментов WAL, доступных для резервных серверов, зависит от местоположения предыдущей контрольной точки и состояния архивирования WAL журналов. Если значения параметров указать без единиц измерения то база данных будет понимать это значения в мегабайтах.

Эти параметры нужно изменять в основной конфигурационном файле postgresql.conf базы данных (Primary).

 

Примеры.

Версия PostgreSQL до 14:

conf> wal_keep_size = 4096

Версия PostgreSQL 14 и выше:

conf> wal_keep_segments = 4096

 

После изминения не забываем обязательно перезапустить базу данных.


 

Всем спасибо, я надеюсь что вам моя статья хоть чем-то помогла.

ПОХОЖИЕ СТАТЬИ

PostgreSQL: Как включить контрольные суммы данных - pg_checksums

PostgreSQL: Как включить контрольные суммы данных - pg_checksums

POSTGRESQL
Postgresql - Список пользователей

Postgresql - Список пользователей

POSTGRESQL
PostgreSQL - ERROR out of shared memory HINT

PostgreSQL - ERROR out of shared memory HINT

POSTGRESQL