linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it worksскоро
  • Уроки
  • База знаний
  • Собеседование
home/postgres/kb/Буферный кеш и WAL/wal-level

kb/buffers-wal ── Буферный кеш и WAL ── advanced

Уровни журнала: minimal, replica, logical

wal_level задаёт детальность журнала: minimal (только crash recovery), replica (по умолчанию: репликация, архивация, PITR), logical (плюс логическое декодирование). Уровни вложены, смена требует перезапуска. Заглянуть в WAL можно через pg_walinspect и pg_waldump.

view as markdownaka: wal-levels, pg-walinspect, pg-waldump

Три уровня, вложенные друг в друга

  • minimal - минимум для восстановления после сбоя на этом же сервере; позволяет некоторым массовым операциям почти не писать в журнал (например, COPY в таблицу, созданную в той же транзакции). Исключает репликацию, архивацию и PITR;
  • replica (по умолчанию) - добавляет данные для физической репликации (см. streaming-replication), архивирования WAL и восстановления на точку (PITR);
  • logical - добавляет логическое описание изменений строк (зависит от REPLICA IDENTITY таблицы), нужное для логической репликации (см. logical-replication) и декодирования.

Каждый уровень пишет всё, что предыдущий, плюс своё; растёт объём журнала.

Матрица возможностей

Возможностьminimalreplicalogical
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).

pg_waldump - утилита командной строки, читает сегменты pg_wal/ без работающего сервера; незаменима, когда сервер не стартует. Сам принцип журнала - в wal, а его обрезание контрольной точкой - в checkpoint.

§ команды

bash
SHOW wal_level;

Текущий уровень журнала (по умолчанию replica)

bash
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)

bash
pg_waldump 000000010000000000000001 | head

Разбор сегмента журнала из командной строки

§ см. также

  • walWAL: принцип write-ahead и LSNWAL - последовательный журнал изменений. Правило write-ahead: запись об изменении попадает на диск раньше самой страницы данных, поэтому сбой не теряет подтверждённые данные. LSN - смещение в потоке журнала. COMMIT при synchronous_commit=on ждёт сброса журнала на диск.
  • checkpointКонтрольные точки и восстановлениеКонтрольная точка сбрасывает все грязные буферы на диск и фиксирует redo point - позицию журнала, с которой начнётся восстановление. Crash recovery проигрывает WAL от redo point вперёд; незакоммиченные транзакции откатываются через clog. Запускается по checkpoint_timeout / max_wal_size.
  • full-page-imagesFull-page images и CRCПри первом изменении страницы после контрольной точки PostgreSQL пишет в журнал не дельту, а всю страницу целиком (FPI) - чтобы при восстановлении починить «рваную» страницу после сбоя. Каждая WAL-запись защищена CRC; битая запись считается концом журнала.
  • streaming-replicationФизическая (потоковая) репликацияStandby проигрывает у себя тот же WAL, что пишет primary, и получается побайтовая копия кластера. Primary отдаёт журнал процессом walsender, standby принимает walreceiver'ом и применяет startup-процессом. Лаг меряется в LSN: насколько replay на standby отстал от записи на primary.
  • logical-replicationЛогическая репликация (publication/subscription)Логическая репликация шлёт не байты WAL, а декодированные изменения строк: INSERT/UPDATE/DELETE по конкретным таблицам. Источник объявляет PUBLICATION, приёмник создаёт SUBSCRIPTION. Требует wal_level = logical. Можно реплицировать часть таблиц между разными версиями и схемами.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки