Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / PostgreSQL |
![]() ![]() |
Dr. Oracle Member Откуда: Сообщений: 47 |
Добрый день, Подскажите, пожалуйста, через какие промежутки времени (или еще какие-то факторы) утилита "pg_archivecleanup" приступает к чистке ненужных для восстановления wal-архивов на стороне Реплики? На данный момент имею следующий recovery.conf на реплике (версия PostgreSQL = 11.6): standby_mode = 'on' primary_conninfo = 'user=replicator password=*** host=*** port=5432 sslmode=prefer sslcompression=0 krbsrvname=postgres target_session_attrs=any' restore_command = 'rsync -az --delete postgres@srv-tst-node1.test.com:/data/11/wal_arch/ /data/11/data/pg_wal' archive_cleanup_command = 'pg_archivecleanup /data/11/data/pg_wal %r 2>> /home/postgres/arch_cleanup.log' Хочу просто понять, на основе каких факторов происходит решение, что пора подчищать. На данный момент на реплике несколько Гигабайт архивов, которые уже не нужны для синхронизации с Мастером. В документации и интернетах не нашел быстро ответ (плохо искал?). |
4 фев 21, 12:14 [22274595] Ответить | Цитировать Сообщить модератору |
Melkij Member Откуда: Санкт-Петербург Сообщений: 1246 |
Dr. Oracle, после окончания checkpoint (restartpoint) https://github.com/postgres/postgres/blob/REL_10_STABLE/src/backend/access/transam/xlog.c#L9457 |
4 фев 21, 15:08 [22274776] Ответить | Цитировать Сообщить модератору |
Dr. Oracle Member Откуда: Сообщений: 47 |
Спасибо, но либо я Вас не правильно понял, либо Вы меня. Мне нужно, чтобы на Реплике подчищались архивы, за счет команды из recovery.conf выше, потому что они уже не нужны постгресу для восстановления. Но этого не происходит. На Мастере у меня уже выполнелось куча чекпоинтов, которые давно приехали на Реплику, но архивы еще лежат не тронутыми. |
4 фев 21, 16:23 [22274891] Ответить | Цитировать Сообщить модератору |
Melkij Member Откуда: Санкт-Петербург Сообщений: 1246 |
Мда, невнимательно посмотрел в содержимое ваших команд. Прочитайте описание restore_command и посмотрите, что вместо этого делаете вы. Затем исправьте его. Старые wal в pg_wal база уже удалила. Вы их обратно записали. База о них заботиться не будет. А pg_archivecleanup предназначен чистить непосредственно архив wal. А не локальный pg_wal. |
4 фев 21, 17:03 [22274927] Ответить | Цитировать Сообщить модератору |
Dr. Oracle Member Откуда: Сообщений: 47 |
Melkij, Переделал следующим образом на Реплике: standby_mode = 'on' primary_conninfo = 'user=***password=***host=*** port=5432 sslmode=prefer sslcompression=0 krbsrvname=postgres target_session_attrs=any' restore_command = 'rsync -az --delete postgres@srv-tst-node1.test.com:/data/11/wal_arch/ /data/11/wal_arch' archive_cleanup_command = 'pg_archivecleanup /data/11/wal_arch %r 2>> /home/postgres/arch_cleanup.log' Но все равно "pg_archivecleanup" ничего не чистит на на Реплике, в директории " /data/11/wal_arch" по прежнему много wal-архивов, но по сути они уже не нужны ... |
4 фев 21, 19:06 [22275040] Ответить | Цитировать Сообщить модератору |
mefman Member Откуда: Сообщений: 3305 |
Файлы вида .partial или .backup в директории есть? |
||||||
4 фев 21, 19:22 [22275052] Ответить | Цитировать Сообщить модератору |
Guzya Member Откуда: Сообщений: 700 |
Ваша командаrsync -az --delete postgres@srv-tst-node1.test.com:/data/11/wal_arch/ /data/11/wal_arch тянет ВСЕ, а должна конкретный файл, который в данный момент нужен postgres-у. Почитайте про параметры %p и %f для restore_command |
5 фев 21, 11:03 [22275362] Ответить | Цитировать Сообщить модератору |
Dr. Oracle Member Откуда: Сообщений: 47 |
Guzya, Да-да-да. Я это только сегодня утром понял - поправил. Все в порядке, всем спасибо. |
5 фев 21, 12:16 [22275429] Ответить | Цитировать Сообщить модератору |
Dr. Oracle Member Откуда: Сообщений: 47 |
Итого так выглядит конечный вариант recovery.confstandby_mode = 'on' primary_conninfo = 'user=replicator password=*** host=*** port=5432 sslmode=prefer sslcompression=0 krbsrvname=postgres target_session_attrs=any' restore_command = 'scp postgres@srv-tst-node1.test.com:/data/11/wal_arch/%f /data/11/data/pg_wal/' Команду для "archive_cleanup_command" убрал вовсе, поскольку получается, что у меня архив лежит на Мастере, откуда мы тянем нужные wal'ы (в случае когда реплика например не работала некоторое время и Мастер удалил нужные для восстановления wal'лы из $PGDATA/pg_wal) напрямую в каталог с wal'ами на Реплике и на ней у меня ничего не архивируется, поэтому в "archive_cleanup_command" нет смысла. А Постгрес я так понимаю сам на стороне Релики позаботится о том, когда удалить/переиспользовать wal'ы из $PGDATA/pg_wal. Я правильно все понял? |
5 фев 21, 12:25 [22275441] Ответить | Цитировать Сообщить модератору |
Guzya Member Откуда: Сообщений: 700 |
Вместо/data/11/data/pg_wal/ можно просто %p указать |
5 фев 21, 12:41 [22275474] Ответить | Цитировать Сообщить модератору |
Все форумы / PostgreSQL | ![]() |