Эквивалентное удержание WAL для одного и того же wal_keep_segments сильно варьируется - PullRequest
0 голосов
/ 11 января 2019

Мы используем postgresql 10 и используем pg_basebackup --pgdata=- -X fetch --format=tar для резервного копирования. В зависимости от размера нашей базы данных резервное копирование может занять много часов. Итак, мы проверяем, сколько времени заняло резервное копирование и каково эквивалентное сохранение WAL нашего wal_keep_segments параметра, запустив SELECT max(modification)-min(modification) FROM pg_ls_waldir().

Однако эквивалентное время хранения WAL для одного и того же wal_keep_segments сильно различается, в то время как срок хранения WAL падает слишком низко, наша резервная копия не удалась из-за удаления сегментов WAL.

pg_basebackup: could not get write-ahead log end position from server:
ERROR:  requested WAL segment 000000010001DDE200000034 has already been removed

Есть ли способ настроить сохранение WAL напрямую вместо количества сегментов WAL? И что может вызвать эту проблему?

Вот график сохранения WAL наших баз данных. Некоторое увеличение шага произошло из-за увеличения wall_keep_segments, но волнообразный паттерн - нет.

enter image description here

1 Ответ

0 голосов
/ 11 января 2019

Лучший способ - использовать --wal-method=stream вместо --wal-method=fetch. На самом деле это включено с PostgreSQL 10. По умолчанию.

pg_basebackup --format=tar --wal-method=stream --gzip --compress=9 --pgdata=.

В выходном каталоге вы получите 2 файла - base.tar.gz и pg_wal.tar.gz. Но вы потеряете возможность использовать лучшую программу сжатия или легко передавать данные по сети.

В качестве альтернативы вы можете отключить архивирование wal в резервной копии и фактически архивировать все файлы wal с помощью archive_command. Вам нужно установить соответствующий restore_command для recovery.conf при восстановлении резервной копии. Это также позволит вам использовать восстановление на определенный момент времени, которое может оказаться очень полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...