Запись страниц

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Операции ввода-вывода из экземпляра ядра СУБД включают логические и физические записи. Логическая запись выполняется при изменении данных страницы в буферном кэше. Физическая запись производится при записи страницы из буферного кэша на диск.

Если какая-либо из страниц в буферном кэше изменилась, она не записывается сразу на диск, а помечается грязной. Это означает, что до момента ее физической записи на диск к странице применялась одна или несколько операций логической записи. При каждой логической операции записи в кэш журнала, который записывает изменения, добавляется запись журнала транзакций. Записи журнала должны быть перенесены на диск до того, как соответствующая «грязная» страница будет удалена из буферного кэша и записана на диск. SQL Server использует метод, называемый ведением журнала с упреждающей записью, который предотвращает записывание "грязных" страниц до записывания на диск соответствующих записей журнала. Это особенно важно для правильной работы диспетчера восстановления. Дополнительные сведения см. в статье Журнал транзакций с упреждающей записью.

На следующем рисунке показан процесс записи измененной страницы данных.

Writing_Pages

При записи страницы диспетчер буферов производит поиск «грязных» страниц, которые расположены рядом с ней и могут быть включены в ту же операцию записи. Соседние страницы обладают последовательными идентификаторами и извлекаются из одного и того же файла. Эти страницы необязательно должны располагаться в памяти последовательно. Поиск в обоих направлениях продолжается до тех пор, пока не произойдет одно из следующих событий:

  • Найдена чистая страница.
  • Найдено 32 страницы.
  • Найдена «грязная» страница, номер LSN которой еще не записан в журнал.
  • Найдена страница, которая не может быть немедленно заблокирована.

Таким образом, весь набор страниц может быть записан на диск всего одной операцией записи.

Непосредственно перед записью страницы к ней применяется та форма защиты страниц, которая указана в базе данных. При защите страницы от разрыва она должна быть кратковременно заблокирована для операций ввода-вывода в монопольном режиме (EX), поскольку защита от разрыва изменяет страницы, делая ее недоступной для чтения остальными потоками. Если применяется защита страницы по контрольной сумме или база данных не использует защиту страниц, то она блокируется для операций ввода-вывода в режиме UP (кратковременная блокировка на обновление). Эта кратковременная блокировка предотвращает изменение страницы во время записи, но разрешает к ней доступ для чтения. Дополнительные сведения о параметрах защиты операций дискового ввода-вывода см. в разделе Управление буферами.

"Грязная" страница записывается на диск одним из трех способов.

  • Отложенная запись
    Модуль отложенной записи — это системный процесс, который освобождает буферы, удаляя из буферного кэша редко используемые страницы. «Грязные» страницы записываются на диск первыми.

  • Активная запись
    Во время процесса активной записи происходит запись страниц данных, связанных с операциями, которые в журнале регистрируются минимально (например массовой вставкой или SELECT INTO). Это позволяет создавать и записывать новые страницы параллельно. Поэтому вызывающая операция не ожидает окончания всей операции, прежде чем записать страницу на диск.

  • Контрольная точка
    Заключается в том, что процесс контрольных точек производит периодический просмотр буферного кэша на наличие буферов со страницами определенной базы данных и запись всех «грязных» страниц на диск. Контрольные точки экономят время во время последующего восстановления при помощи создания точки, в которой все «грязные» страницы гарантированно записываются на диск. Пользователь может запросить операцию контрольной точки с помощью команды КОНТРОЛЬНЫХ ТОЧЕК, или ядро СУБД может создавать автоматические контрольные точки на основе объема используемого пространства журнала и времени, истекшего с момента последней контрольной точки. Помимо этого, контрольная точка создается при возникновении событий определенного рода, например когда файл журнала или файл данных добавляется в базу данных или удаляется из нее либо при остановке экземпляра SQL Server. Дополнительные сведения см. в статье Контрольные точки и активная часть журнала.

В режимах отложенной записи, активной записи и контрольной точки ожидание завершения операций ввода-вывода не производится. Они всегда выполняются асинхронно и параллельно с другими операциями, откладывая проверку успешности завершения операций ввода-вывода на более поздний срок. Это позволяет SQL Server максимально эффективно использовать ресурсы ЦП и устройств ввода-вывода для соответствующих задач.

См. также

Руководство по архитектуре страниц и экстентов
Считывание страниц