Ответ
WAL (Write-Ahead Log) — это стандартный механизм в современных СУБД (например, PostgreSQL), обеспечивающий атомарность и долговечность транзакций (две из четырех гарантий ACID).
Основной принцип: любые изменения данных (INSERT
, UPDATE
, DELETE
) сначала последовательно дописываются в специальный журнал (лог-файл) на диске и только после этого применяются к основным файлам данных, которые могут быть разбросаны по диску.
Ключевые задачи, которые решает WAL:
Надежность (Durability): Транзакция считается завершенной (
COMMIT
) только после того, как запись о ней попала в WAL. В случае сбоя питания или падения сервера, СУБД при запуске проигрывает записи из WAL, чтобы восстановить все закоммиченные, но не сохраненные в основные файлы данных, гарантируя их сохранность.Производительность: Запись на диск — медленная операция. Последовательная запись в один лог-файл (как делает WAL) намного быстрее, чем множество хаотичных записей в разные места на диске (куда могут указывать разные таблицы и индексы). Это значительно ускоряет обработку транзакций.
Восстановление на момент времени (Point-in-Time Recovery): Архивированные файлы WAL позволяют восстановить состояние базы данных на любой момент времени в прошлом, что критически важно для резервного копирования и аварийного восстановления.