# Уровни журнала: minimal, replica, logical _Буферный кеш и WAL · PostgreSQL Knowledge Base_ **TL;DR:** wal_level задаёт детальность журнала: minimal (только crash recovery), replica (по умолчанию: репликация, архивация, PITR), logical (плюс логическое декодирование). Уровни вложены, смена требует перезапуска. Заглянуть в WAL можно через pg_walinspect и pg_waldump. ## Три уровня, вложенные друг в друга - **minimal** - минимум для восстановления после сбоя на этом же сервере; позволяет некоторым массовым операциям почти не писать в журнал (например, `COPY` в таблицу, созданную в той же транзакции). Исключает репликацию, архивацию и PITR; - **replica** (по умолчанию) - добавляет данные для физической репликации (см. [streaming-replication](/courses/postgres/kb/streaming-replication.md)), архивирования WAL и восстановления на точку (PITR); - **logical** - добавляет логическое описание изменений строк (зависит от `REPLICA IDENTITY` таблицы), нужное для логической репликации (см. [logical-replication](/courses/postgres/kb/logical-replication.md)) и декодирования. Каждый уровень пишет всё, что предыдущий, плюс своё; растёт объём журнала. ## Матрица возможностей | Возможность | minimal | replica | logical | |---|---|---|---| | Crash recovery | да | да | да | | Архивация / PITR | нет | да | да | | Физическая репликация | нет | да | да | | Логическая репликация | нет | нет | да | ## Выбор заранее, не задним числом Поднять с `minimal` до `replica`, чтобы «прямо сейчас» сделать реплику из текущего состояния, нельзя - в прошлом журнале нет нужных данных. Смена уровня требует перезапуска сервера, и полным станет только новый журнал. ## Заглянуть в журнал `pg_walinspect` (PG15+) - из SQL на живом сервере: ```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](/courses/postgres/kb/full-page-images.md)). `pg_waldump` - утилита командной строки, читает сегменты `pg_wal/` без работающего сервера; незаменима, когда сервер не стартует. Сам принцип журнала - в [wal](/courses/postgres/kb/wal.md), а его обрезание контрольной точкой - в [checkpoint](/courses/postgres/kb/checkpoint.md). ## Команды ```sql SHOW wal_level; ``` Текущий уровень журнала (по умолчанию replica) ```sql 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; ``` Статистика записей WAL по подсистемам (pg_walinspect) ```sql pg_waldump 000000010000000000000001 | head ``` Разбор сегмента журнала из командной строки ## См. также - [WAL: принцип write-ahead и LSN](/courses/postgres/kb/wal.md) - [Контрольные точки и восстановление](/courses/postgres/kb/checkpoint.md) - [Full-page images и CRC](/courses/postgres/kb/full-page-images.md) - [Физическая (потоковая) репликация](/courses/postgres/kb/streaming-replication.md) - [Логическая репликация (publication/subscription)](/courses/postgres/kb/logical-replication.md)