Какие данные берет БД из WAL журнала при восстановлении прерванной транзакции

«Какие данные берет БД из WAL журнала при восстановлении прерванной транзакции» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

WAL (Write-Ahead Log) хранит изменения данных до их записи в основную БД. При восстановлении:

  1. Незавершенные транзакции - откатываются (rollback) по записям WAL
  2. Завершенные транзакции - применяются (redo) из WAL, если не попали в основную БД

Пример для PostgreSQL:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Сбой системы здесь
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

При восстановлении:

  • Проверяет статус транзакции в WAL
  • Если COMMIT есть - выполняет оба UPDATE
  • Если COMMIT отсутствует - откатывает первый UPDATE

WAL содержит:

  • Идентификатор транзакции (XID)
  • Тип операции (INSERT/UPDATE/DELETE)
  • Старые и новые значения данных
  • Метки времени и контрольные точки