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/lessons/pg-lab-20-1-wal-levels

lesson ── postgres-labs ── ~22 мин ── 5 шагов

Разбери журнал по записям через pg_walinspect

wal_level задаёт, насколько подробно журнал описывает изменения. Сервер работает на уровне по умолчанию - его и узнаем. А потом через pg_walinspect разберём журнал на записи и увидим, какая подсистема их породила: строки таблиц, индексы, коммиты, full-page images. Перед шагами предскажи, записи какой подсистемы будут преобладать.

▶ интерактивный sandbox

Поднимется контейнер postgreslab/postgres-base с PostgreSQL 17 и psql. В браузере откроется терминал, база lab уже настроена. Каждый шаг проверяется автоматически. Сеть air-gapped, наружу контейнер не ходит.

запустить sandbox →

stack ── PostgreSQL 17 · psql · 1 GB RAM · air-gapped · самоуничтожается через 45 мин простоя

Шаги

  1. 01

    Узнай уровень журнала

    sql
    SHOW wal_level;

    Предскажи значение: это уровень по умолчанию, на котором работает большинство баз - он позволяет физическую репликацию, архивацию и PITR.

    ✓ Уровень — replica: репликация и PITR возможны, логическое декодирование нет.

  2. 02

    Нагенерируй изменения для разбора

    sql
    CREATE TABLE wal_inspect_demo (id serial PRIMARY KEY, payload text);
    INSERT INTO wal_inspect_demo (payload)
      SELECT repeat('x', 100) FROM generate_series(1, 500);
    UPDATE wal_inspect_demo SET payload = repeat('y', 100);

    Вставки и обновления по индексированной таблице породили записи и в Heap (строки), и в Btree (индекс), и Transaction (коммиты).

    ✓ Материал для разбора готов — журнал пополнился записями.

  3. 03

    Посмотри статистику записей по подсистемам

    sql
    SELECT "resource_manager/record_type" AS rmgr, count, record_size
    FROM pg_get_wal_stats(pg_current_wal_lsn() - 200000,
                          pg_current_wal_lsn(), false)
    ORDER BY count DESC;

    Колонка ресурс-менеджера (в выводе её имя resource_manager/record_type, поэтому берём её в кавычки) показывает источник: Heap - строки таблиц, Btree - индексы, Transaction - коммиты и аборты, XLOG - служебные записи. Найди строку Heap.

    ✓ Записи Heap найдены — это изменения строк таблиц в журнале.

  4. 04

    Разбери отдельные записи журнала

    sql
    SELECT start_lsn, resource_manager, record_type, record_length
    FROM pg_get_wal_records_info(pg_current_wal_lsn() - 200000,
                                pg_current_wal_lsn())
    WHERE resource_manager = 'Heap'
    LIMIT 10;

    Вот они, отдельные записи: каждая со своим LSN, типом (INSERT, UPDATE, HOT_UPDATE) и размером. Так абстрактный журнал превращается в конкретный список операций.

    ✓ Ты видишь отдельные записи журнала — INSERT и UPDATE как они есть.

  5. 05

    Поймай full-page images после контрольной точки

    sql
    CHECKPOINT;
    UPDATE wal_inspect_demo SET payload = repeat('z', 100);
    SELECT sum(fpi_size) AS total_fpi_bytes
    FROM pg_get_wal_stats(pg_current_wal_lsn() - 200000,
                          pg_current_wal_lsn(), false);

    Первое изменение каждой страницы после контрольной точки тащит за собой полную копию страницы. Предскажи: будет ли total_fpi_bytes больше нуля?

    подсказка

    FPI пишутся при первом касании страницы после контрольной точки.

    ✓ Full-page images в журнале — ты увидел цену надёжности в байтах.

Что ты узнал

wal_level задаёт детальность журнала (replica по умолчанию). pg_walinspect показывает содержимое WAL из SQL: pg_get_wal_stats - по подсистемам (Heap, Btree, Transaction, XLOG), pg_get_wal_records_info - отдельные записи. fpi_size показывает объём full-page images.

команды

  • SHOW wal_level;уровень детализации журнала
  • SELECT resource_manager, count FROM pg_get_wal_stats(pg_current_wal_lsn()-200000, pg_current_wal_lsn(), false);записи по подсистемам
  • SELECT * FROM pg_get_wal_records_info(pg_current_wal_lsn()-200000, pg_current_wal_lsn());отдельные записи журнала

концепции

  • · wal_level replica поддерживает репликацию и PITR, logical — ещё и декодирование
  • · один INSERT в индексированную таблицу порождает Heap-, Btree- и Transaction-записи
  • · fpi_size в pg_get_wal_stats показывает объём full-page images

← предыдущая

Найди redo point и посмотри, что проиграло бы восстановление

следующая →

Поймай каскад блокировок от idle-in-transaction

Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки