Общие сведения о общей файловой системе журналов
Общая файловая система журналов (CLFS) — это служба ведения журнала общего назначения, которую могут использовать клиенты программного обеспечения, работающие в пользовательском режиме или режиме ядра. В этой документации рассматривается интерфейс CLFS для клиентов в режиме ядра. Сведения об интерфейсе пользовательского режима см. в разделе Common Log File System в Microsoft Windows SDK.
CLFS инкапсулирует все функциональные возможности алгоритма восстановления и изоляции семантики использования (ARIES). Однако интерфейс драйвера устройства CLFS (DDI) не ограничивается поддержкой ARIES; он хорошо подходит для различных сценариев ведения журнала.
Основная задача любого высокопроизводительного журнала транзакций заключается в том, чтобы клиенты журнала могли точно повторять журнал. ClFS делает это путем маршалирования записей журнала клиента в буферы памяти, принудительного их стабильного хранения и чтения записей по запросу. Важно отметить, что после того, как запись станет стабильной, а носитель нетронутым, CLFS сможет считывать запись при сбоях системы.
CLFS поддерживает выделенные журналы и мультиплексированные журналы. Выделенный журнал содержит один поток записей журнала, который используется всеми клиентами журнала. Мультиплексный журнал (также называемый общим журналом) содержит несколько потоков. Каждый поток имеет собственные клиенты и собственные буферы памяти для маршалинга записей журнала, но записи из всех этих буферов мультиплексируются в одну очередь и сбрасываются в один журнал в стабильном хранилище. Мультиплексирование позволяет консолидировать операции ввода-вывода нескольких потоков.
Когда клиент записывает запись в поток, он возвращает номер журнала (LSN), который идентифицирует запись журнала для дальнейшего использования. Имена LSN, назначенные записям, которые записываются в определенный поток, образуют увеличивающуюся последовательность. Это значит, что номер LSN, назначенный записи, записываемой в поток, всегда больше, чем номер LSN, назначенный предыдущей записи, записанной в тот же поток.
CLFS предоставляет несколько служб в дополнение к маршалингу, очистке и извлечению записей журнала. В следующем списке описаны некоторые из этих дополнительных служб.
Пространство для набора связанных записей журнала можно зарезервировать заранее. Это означает, что клиент может продолжить выполнение транзакции, зная, что CLFS сможет добавить в журнал все записи, описывающие транзакцию.
CLFS поддерживает заголовок для каждой записи журнала. Клиенты могут задавать определенные поля в заголовке, чтобы создавать цепочки связанных записей, которые позже можно будет просматривать в обратном порядке.
CLFS сбрасывает записи журналов в стабильное хранилище в соответствии со своей политикой, но также позволяет клиентам принудительно принудить набор записей журнала к стабильному хранилищу.
CLFS поддерживает метаданные для журнала, а также для каждого потока мультиплексированного журнала. Клиенты могут просматривать метаданные и задавать определенные части метаданных.
Для каждого потока CLFS поддерживает базовый номер LSN и последний номер LSN, которые клиент может использовать для обозначения активной части потока.
Для выделенных журналов CLFS сохраняет (по запросу клиента) архивный хвост, который клиент может использовать для отслеживания части журнала, которая была архивирована.
Некоторые функции CLFS (например, предыдущие поля LSN и отмена следующего LSN заголовка записи) можно лучше всего понять, изучив ARIES. Дополнительные сведения о ARIES см. в следующих статьях.
В. Мохан, Дон Хадерл, Брюс Линдсей, Хамид Пирахеш, Питер Шварц, ARIES: Метод восстановления транзакций, поддерживающий Fine-Granularity блокировки и частичные откаты с помощью Write-Ahead ведения журнала.
В. Мохан, повторяя историю за пределами ARIES.