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