Журнал Опережающей Записи (WAL)

29.2. Журнал Опережающей Записи (WAL)

Журнал Опережающей Записи (WAL) — это стандартный метод обеспечения целостности данных. Детальное описание можно найти в большинстве (если не всех) книг по обработке транзакций. Вкратце, основная идея WAL состоит в том, что изменения в файлах с даннными (где находятся таблицы и индексы) должны записываться только после того, как эти изменения были занесены в журнал, т.е. после того как записи журнала, описывающие данные изменения, будут сохранены на постоянное устройство хранения. Если следовать этой процедуре, то записывать страницы данных на диск после каждого подтверждения транзакции, нет необходимости, потому что мы знаем, что если случится крах, то у нас будет возможность восстановить базу данных с помощью журнала: любые изменения, которые не были применены к страницам с даннными, могут быть воссозданы из записей журнала. (Это называется восстановлением с помощью наката, также известным как REDO.)

Tip: Поскольку WAL восстанавливает содержимое файлов базы данных, журналируемая файловая система не является необходимой для надёжного хранения файлов с данными или файлов WAL. Фактически, журналирование может снизить производительность, особенно если журналирование заставляет сохранять данные файловой системы на диск. К счастью, такое сохранение во время журналирования часто может быть выключено с помощью опций монтирования файловой системы, например, data=writeback на файловой системе ext3 в Linux. Зато журналируемые файловые системы улучшают скорость загрузки после краха.

Результатом использования WAL является значительное уменьшение количества запросов записи на диск, потому что для гарантии, что транзакция подтвержена, в записи на диск нуждается только файл журнала, а не каждый файл данных, изменённый в результате транзакции. Файл журнала записывается последовательно и таким образом, затраты на синхронизацию журнала намного меньше, чем затраты на запись страниц с данными. Это особенно справедливо для серверов, которые обрабатывают много маленьких транзакций, изменяющих разные части хранилища данных. Таким образом, когда сервер обрабатывает множество мелких конкурентных транзакций, для подтверждения многих транзакций достаточно одного вызова fsync на файл журнала.

WAL также делает возможным поддержку онлайнового резервного копирования и восстановления на определённый момент времени, как описывается в Section 24.3. С помощью архивирования данных WAL поддерживается возврат к любому моменту времени, который доступен в данных WAL: мы просто устанавливаем предыдущую физическую резервную копию базы данных и накатываем журнал WAL к нужному моменту времени. Более того, физическая резервная копия не должна быть мгновенным снимком состояния баз даных — если она была сделана некоторое время назад, накат журнала WAL за этот период исправит все внутренние несоответствия.

Back to top

(С) Виктор Вислобоков, 2008-2023