Чистка архива WAL в реплицируемых базах Postgresql

Потоковая репликация Postgresql это конечно круто, но есть у этой технологии и немного минусов. Во первых, при активной записи и обновлении данных генерируется довольно много трафика и я на одном из микро-тарифов довольно быстро вышел за лимиты, а во вторых, WAL-логи при активной записи и обновлении данных в базе Postgresql очень быстро разрастаются и начинают занимать гораздо больше места, чем сама база данных. Сегодня мы будем решать вторую проблему.

 
 
Логотип GITA-DEV

Автор: Черноусов Антон aka Gita-Dev
Опубликовано: 18 Сен 2018 (последние правки 3 месяца)

backup postgres postgresql postgresql 10 tar

Официальная дока на тему находится по адресу https://www.postgresql.org/docs/9.2/static/pgarchivecleanup.html Я же продемонстрирую немного практики, как раз на том сервере который вышел за все допустимые лимиты.

Сейчас наблюдается такая картина

# du -hs /var/lib/postgresql/10/archive/
2.6G   /var/lib/postgresql/10/archive/
# du -hs /var/lib/postgresql/10/main/
1.3G   /var/lib/postgresql/10/main/

Размер архив-логов в два раза больше чем сама база (что логично) поэтому мы можем или чистить архив-логи автоматически или производить эти операции вручную.

Можно почистить архив в ручном режиме и для этого мы создаем точку backup на мастер-сервере (задаем ей метку):

# su postgres
$ psql
# SELECT pg_start_backup('test-archive-clean', true);
# SELECT pg_stop_backup();

В чистом виде нас интересует исключительно создание backup-файла в архиве WAL:

$ ls /var/lib/postgresql/10/archive/ | grep backup
00000001000000000000000E.00000028.backup
0000000100000000000000AD.00000028.backup

Проверяем состояние репликации (текущую позицию) у MASTER-сервера:

# select pg_current_wal_lsn();
 pg_current_wal_lsn
--------------------
 0/AE1D8000
(1 row)

На Slave-сервере:
# select pg_last_wal_replay_lsn();
 pg_last_wal_replay_lsn
------------------------
 0/AE1E9A68
(1 row)

На Slave-сервере принудительно выполним очистку архива wal-логов до текущей backup-точки:

$ pg_archivecleanup -d /var/lib/postgresql/10/archive/ 0000000100000000000000AD.00000028.backup

В результате выполнения команды будет выведен список удаленных файлов журнала:

$ pg_archivecleanup -d /var/lib/postgresql/10/archive/ 0000000100000000000000AD.00000028.backup
pg_archivecleanup: keeping WAL file "/var/lib/postgresql/10/archive//0000000100000000000000AD" and later
pg_archivecleanup: removing file "/var/lib/postgresql/10/archive//00000001000000000000005B"
...
pg_archivecleanup: removing file "/var/lib/postgresql/10/archive//0000000100000000000000A5"
pg_archivecleanup: removing file "/var/lib/postgresql/10/archive//000000010000000000000015"

Теперь архив содерхит только следующие записи:

$ ls -lua /var/lib/postgresql/10/archive/
total 131096
drwxr-xr-x 2 postgres postgres   12288 Aug 28 2018 .
drwxr-xr-x 4 postgres postgres    4096 Aug 28 09:22 ..
-rw------- 1 postgres postgres     304 Aug 1 14:56 00000001000000000000000E.00000028.backup
-rw------- 1 postgres postgres 16777216 Aug 28 09:34 0000000100000000000000AD
-rw------- 1 postgres postgres     305 Aug 28 09:34 0000000100000000000000AD.00000028.backup
-rw------- 1 postgres postgres 16777216 Aug 28 10:05 0000000100000000000000AE
-rw------- 1 postgres postgres 16777216 Aug 28 10:11 0000000100000000000000AF
-rw------- 1 postgres postgres 16777216 Aug 28 10:29 0000000100000000000000B0
-rw------- 1 postgres postgres 16777216 Aug 28 10:39 0000000100000000000000B1
-rw------- 1 postgres postgres 16777216 Aug 28 10:49 0000000100000000000000B2
-rw------- 1 postgres postgres 16777216 Aug 28 11:03 0000000100000000000000B3
-rw------- 1 postgres postgres 16777216 Aug 28 11:11 0000000100000000000000B4

Для автоматической очистки мы добавим в файл /var/lib/postgresql/10/main/recovery.conf параметр:

archive_cleanup_command = 'pg_archivecleanup -d /var/lib/postgresql/10/archive/ %r >> /var/log/postgresql/cleanup.log 2>&1'

Перезапускаем Postgresql:

# /etc/init.d/postgresql restart

Проверяем лог чистки архива:

pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: удаление файла "/var/lib/postgresql/10/archive//0000000100000000000000AD"
pg_archivecleanup: удаление файла "/var/lib/postgresql/10/archive//0000000100000000000000AF"
pg_archivecleanup: удаление файла "/var/lib/postgresql/10/archive//0000000100000000000000B0"
pg_archivecleanup: удаление файла "/var/lib/postgresql/10/archive//0000000100000000000000B4"
pg_archivecleanup: удаление файла "/var/lib/postgresql/10/archive//0000000100000000000000B3"
pg_archivecleanup: удаление файла "/var/lib/postgresql/10/archive//0000000100000000000000B2"
pg_archivecleanup: удаление файла "/var/lib/postgresql/10/archive//0000000100000000000000B1"
pg_archivecleanup: удаление файла "/var/lib/postgresql/10/archive//0000000100000000000000AE"
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B5" и последующие
pg_archivecleanup: будет сохранён файл WAL "/var/lib/postgresql/10/archive//0000000100000000000000B6" и последующие
pg_archivecleanup: удаление файла "/var/lib/postgresql/10/archive//0000000100000000000000B5"

Чистить wal-логи надо обязательно, на интенсивных операциях обновления и записи они разрастаются неприлично быстро.

 

Похожие статьи

Установка Postgresql версии 10 в Ubuntu Linux и Debian Linux

Установка Postgresql версии 10 в Ubuntu Linux и Debian Linux

На данный момент,10-ая версия Postgresql является стабильной и данный релиз принес довольно много "вкусностей", таких как: логическая репликация, партиционирование, улучшена производительность физической репликации, hash-индексы стали реплицируемы, поддержка полнотекстового поиска на jsonb колонках, улучшенная поддержка работы с xml и многое другое ... Естественно, что сходу мигрировать ваш сайт или приложение на новую версию не стоит, так как в ряде случаев вам потребуется некоторая доработка для обеспечения совместимости с десятой версией.


Установка Postgresql 10.4 на платформу ARM

Установка Postgresql 10.4 на платформу ARM

Собрать Postgresql 10.4 под платформу ARM я решил для того чтобы проверить одну свою идею по поводу логической репликации. Логическая репликация это новая фишка Postgresql 10-ой версии позволяющая реплицировать в Read only режиме отдельные таблицы на другой Postgresql server. Но вот правда одна незадача выяснилась, а именно под мою ARM-платформу собранных пакетов не нашлось.


Легковесный почтовый сервер с хранением учетных данных в базе Postgresql

Легковесный почтовый сервер с хранением учетных данных в базе Postgresql

До этого я рассказывал исключительно о монстроидальном комплексе совместной работы под названием Zimbra и вы наверное поняли, что запустить его на небольшом VPS у вас не получится, так как он потребляет просто огромное количество системных ресурсов. Но, что же делать, если требуется собственный почтовый сервер и вы сильно ограничены в системных ресурсах? Правильный ответ, это собрать его самому из Opensource-компонентов и полученный результат удивит вас своей легковесностью.


Установка свежих версий Postgresql (10.X) в Debian Linux

Установка свежих версий Postgresql (10.X) в Debian Linux

В LTS-версии дистрибутивов обычно входят такие-же LTS версии пакетов и в ряде случаев это конечно хорошо и стабильные обкатанные версии это гораздо лучше чем dev-ветки, но иногда требуются именно новые возможности которые появились недавно. Например мне, требовалась логическая репликация Postgresql в Debian версии 9.4, но логическая репликация появилась только в Postgresql 10, а штатный пакет в дистрибутиве имеет версию 9.6.


Настройка потоковой репликации Postgresql сервера (WAL-репликация)

Настройка потоковой репликации Postgresql сервера (WAL-репликация)

Потоковая репликация Postgresql сервера позволяет создать асинхронную Read Only копию сервера баз данных который можно использовать как FailOver-сервер или строить на нем какие-то тяжелые аналитические отчеты которые бы в свою очередь сильно загрузили боевой сервер. Назначений можно придумать огромное множество, да и настраивается эта технология довольно просто, правда есть у нее есть и несколько недостатков.


GITLAB - перенос интегрированной базы Postgresql в штатную базу операционной системы

GITLAB - перенос интегрированной базы Postgresql в штатную базу операционной системы

GitLab, это отличный GIT-репозитарий для использования внутри компании с богатым функционалом и простой установкой, как его устанавливать я уже рассказывал и вы наверное обратили внимание, что этот продукт рекомендуется использовать на отдельном хосте и он поставляется полностью со своей инфраструктурой программ окружения. Как отвязать его от использования встроенного Nginx я вам уже рассказал и сегодня мы будем отвязывать его от встроенного сервера Postgresql.


Мониторинг основных показателей базы данных Postgresql при помощи Zabbix

Мониторинг основных показателей базы данных Postgresql при помощи Zabbix

Сегодня я хотел бы продолжить цикл статей по мониторингу различных сервисов при помощи Zabbix и начнем пожалуй с баз данных Postgresql, на деле там ничего особо сложного нет и все уже давно придумано до нас. Нам остается только внедрить сборщик данных на сервер и понять, что за сведения мы собираем и где стоит установить границы срабатывания триггеров.


Установка и настройка Postgresql в Windows 10

Установка и настройка Postgresql в Windows 10

Установка Postgresql и утилит администрирования в Windows 10 (как в прочем и других версиях) особой сложности не представляет и сейчас я вам продемонстрирую как это сделать.


Оптимизация настроек Postgresql-сервера

Оптимизация настроек Postgresql-сервера

Как показывает практика, большие руководства читают только в крайнем случае и в большинстве случаев наиболее востребованным форматом являются быстрые чек-листы и наборы команд и параметров "как сделать чтобы было хорошо". К оптимизации сервера Postgresql нельзя приступать не выяснив основные метрики сервера исходя из которых мы будем "плясать" и сегодня я расскажу как собрать необходимые для анализа параметры и исходя из полученных данных произвести оптимизацию сервера.


Как установить Postgresql 11.1 в Ubuntu Server 18.04

Как установить Postgresql 11.1 в Ubuntu Server 18.04

Если вы пользовались бинарными инсталляторами от EDB Postgres, то у меня для вас плохая новость и Postgresql 10 был последней Linux версией которая поддерживалась Enterprise Postgres. Согласно сообщению на сайте бинарные пакеты инсталляторов будут поддерживаться только для Windows и MacOS, а для Linux рекомендуется использовать репозитории вашего дистрибутива.


Отзывы и комментарии