Журнал предзаписи (WAL)
Эта страница переведена при помощи нейросети GigaChat.
Журнал предзаписи (WAL) является стандартным методом обеспечения целостности данных. Подробное описание можно найти в большинстве (если не во всех) книгах о транзакционной обработке. Кратко говоря, центральная концепция WAL заключается в том, что изменения файлов данных (где находятся таблицы и индексы) должны быть записаны только после того, как эти изменения были зарегистрированы, то есть после того, как записи журнала, описывающие изменения, были сброшены в постоянное хранилище. Если следовать этой процедуре, то не нужно сбрасывать данные страницы на диск при каждом подтверждении транзакции, потому что известно, что в случае сбоя можно будет восстановить базу данных, используя журнал: любые изменения, которые еще не были применены к страницам данных, могут быть повторены из записей журнала. Это называется восстановлением с воспроизведением, также известное как REDO.
Поскольку WAL восстанавливает содержимое файлов базы данных после сбоя, журналируемые файловые системы не являются необходимыми для надежного хранения файлов данных или файлов WAL. На самом деле накладные расходы на ведение журнала могут снизить производительность, особенно если ведение журнала вызывает сброс данных файловой системы на диск. К счастью, сброс данных при ведении журнала часто можно отключить с помощью опции монтирования файловой системы, например, data=writeback
в файловой системе Linux ext3. Журналируемые файловые системы действительно улучшают скорость загрузки после сбоя.
Использование WAL приводит к значительному сокращению количества операций записи на диск, поскольку для гарантии фиксации транзакции необходимо сбросить на диск только файл журнала, а не каждый измененный файл данных. Файл журнала пишется последовательно, поэтому стоимость синхронизации журнала намного меньше стоимости сброса данных страниц. Это особенно верно для серверов, обрабатывающих множество небольших транзакций, касающихся различных частей хранилища данных. Кроме того, когда сервер обрабатывает множество небольших одновременных транзакций, одной записи файла журнала может хватить для подтверждения множества транзакций.
WAL также позволяет поддерживать онлайн-резервное копирование и восстановление до определенной точки времени, как описано в разделе «Непрерывное архивирование и точечное восстановление (PITR)». Путем архивирования данных WAL можно поддерживать возврат к любому моменту времени, охватываемому доступными данными WAL: просто устанавливается предыдущая физическая резервная копия базы данных и воспроизводится журнал WAL до нужного момента времени. Более того, физическая резервная копия не обязательно должна быть мгновенным снимком состояния базы данных – если она создается за определенный период времени, то воспроизведение журнала WAL за этот период устранит любые внутренние несоответствия.