WAL требует записать журнал изменений раньше изменённых страниц данных. При восстановлении БД использует журнал, а судьба коммита зависит от того, успела ли его запись стать долговечной.
Как устроен механизм Write-Ahead Logging (WAL) и что произойдет при сбое питания в момент коммита?
WAL требует записать журнал изменений раньше изменённых страниц данных. При восстановлении БД использует журнал, а судьба коммита зависит от того, успела ли его запись стать долговечной.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
WAL требует записать журнал изменений раньше изменённых страниц данных. При восстановлении БД использует журнал, а судьба коммита зависит от того, успела ли его запись стать долговечной.
При обычной синхронной фиксации сервер подтверждает commit после необходимого сброса WAL на устойчивое хранилище. Если питание пропало позже, восстановление повторит зафиксированные изменения, даже когда страницы данных ещё не записаны. Если ответ клиенту не дошёл, результат может быть неопределённым для клиента, хотя транзакция уже зафиксирована. Настройки асинхронного commit, отключённый fsync или неверно работающий дисковый кеш меняют гарантии. WAL защищает от определённого класса сбоев, но не заменяет резервное копирование и проверку восстановления.