lesson ── postgres-labs ── ~22 мин ── 4 шагов
Журнал предзаписи (WAL) фиксирует каждое изменение раньше, чем оно
попадёт в файлы данных. Сейчас ты увидишь журнал в работе: замеришь
позицию LSN, нагенеришь изменений, посмотришь счётчики pg_stat_wal и
поймаешь всплеск full-page images сразу после контрольной точки. Перед
шагами предскажи, вырастет ли счётчик.
интерактивный sandbox
Поднимется контейнер postgreslab/postgres-base с PostgreSQL 17 и psql. В браузере откроется терминал, база lab уже настроена. Каждый шаг проверяется автоматически. Сеть air-gapped, наружу контейнер не ходит.
stack ── PostgreSQL 17 · psql · 1 GB RAM · air-gapped · самоуничтожается через 45 мин простоя
SELECT pg_current_wal_lsn();
LSN - это смещение в байтах в потоке журнала. Запомни его: разница с будущим LSN покажет, сколько журнала сгенерировали.
✓ Позиция журнала снята — это наша отметка «было».
SELECT wal_records, wal_bytes, wal_fpi FROM pg_stat_wal;
wal_records - число записей в журнале, wal_bytes - объём,
wal_fpi - число full-page images (полных копий страниц).
✓ Счётчики журнала на месте — есть от чего отталкиваться.
CREATE TABLE wal_demo (id serial PRIMARY KEY, payload text);
INSERT INTO wal_demo (payload)
SELECT repeat('x', 100) FROM generate_series(1, 1000);SELECT pg_current_wal_lsn();
Тысяча вставок породила записи в журнал и сдвинула LSN вперёд. Предскажи: на сколько примерно байт он ушёл от стартовой отметки?
✓ Нагрузка сгенерирована — журнал заметно вырос.
CHECKPOINT;
UPDATE wal_demo SET payload = repeat('y', 100);SELECT wal_fpi FROM pg_stat_wal;
После контрольной точки первое изменение каждой страницы тащит за
собой полную копию страницы (FPI) - защита от рваной записи. Поэтому
wal_fpi подскакивает. Предскажи: вырастет ли счётчик после UPDATE?
FPI пишутся при первом касании страницы после каждой контрольной точки.
✓ Full-page images на месте — ты поймал цену надёжности.
WAL фиксирует изменения раньше файлов данных. LSN - позиция в потоке журнала; pg_stat_wal показывает темп (wal_records, wal_bytes) и full-page images (wal_fpi). После контрольной точки первое изменение страницы пишет её полную копию.
команды
SELECT pg_current_wal_lsn();текущая позиция записи в журналSELECT wal_records, wal_bytes, wal_fpi FROM pg_stat_wal;темп и состав генерации WALCHECKPOINT;принудительная контрольная точкаконцепции