Три уровня, вложенные друг в друга
- minimal - минимум для восстановления после сбоя на этом же сервере;
позволяет некоторым массовым операциям почти не писать в журнал
(например,
COPYв таблицу, созданную в той же транзакции). Исключает репликацию, архивацию и PITR; - replica (по умолчанию) - добавляет данные для физической репликации (см. streaming-replication), архивирования WAL и восстановления на точку (PITR);
- logical - добавляет логическое описание изменений строк (зависит от
REPLICA IDENTITYтаблицы), нужное для логической репликации (см. logical-replication) и декодирования.
Каждый уровень пишет всё, что предыдущий, плюс своё; растёт объём журнала.
Матрица возможностей
| Возможность | minimal | replica | logical |
|---|---|---|---|
| Crash recovery | да | да | да |
| Архивация / PITR | нет | да | да |
| Физическая репликация | нет | да | да |
| Логическая репликация | нет | нет | да |
Выбор заранее, не задним числом
Поднять с minimal до replica, чтобы «прямо сейчас» сделать реплику из
текущего состояния, нельзя - в прошлом журнале нет нужных данных. Смена
уровня требует перезапуска сервера, и полным станет только новый журнал.
Заглянуть в журнал
pg_walinspect (PG15+) - из SQL на живом сервере:
CREATE EXTENSION IF NOT EXISTS pg_walinspect;
SELECT "resource_manager/record_type" AS rmgr, count
FROM pg_get_wal_stats(pg_current_wal_lsn() - 100000,
pg_current_wal_lsn(), false)
ORDER BY count DESC;
Колонка ресурс-менеджера (в выводе зовётся resource_manager/record_type):
Heap - строки таблиц, Btree - индексы, Transaction - коммиты/аборты,
XLOG - служебные записи и full-page images (см. full-page-images).
pg_waldump - утилита командной строки, читает сегменты pg_wal/ без
работающего сервера; незаменима, когда сервер не стартует. Сам принцип
журнала - в wal, а его обрезание контрольной точкой - в checkpoint.