Запись страниц
Операции ввода-вывода, выполняемые экземпляром компонента Database Engine, включают в себя операции логической и физической записи. Логическая запись выполняется при изменении данных страницы в буферном кэше. Физическая запись производится при записи страницы из буферного кэша на диск.
Если какая-либо из страницы в буферном кэше изменилась, она не записывается сразу на диск, а помечается как грязная. Это означает, что до момента ее физической записи на диск к странице применялась одна или несколько операций логической записи. При каждой логической операции записи в кэш журнала, который записывает изменения, добавляется запись журнала транзакций. Записи журнала должны быть записаны на диск до того, как связанная с ними «грязная» страница будет удалена из буферного кэша и записана на диск. SQL Server использует метод, называемый упреждающим ведением журнала, который предотвращает запись «грязных» страниц до записи на диск связанных с ними логических записей. Это особенно важно для правильной работы диспетчера восстановления. Дополнительные сведения см. в разделе Журнал транзакций с упреждающей записью.
На следующем рисунке показан процесс записи измененной страницы данных.
При записи страницы диспетчер буферов производит поиск «грязных» страниц, которые расположены рядом с ней и могут быть включены в ту же операцию записи. Соседние страницы обладают последовательными идентификаторами и извлекаются из одного и того же файла. Эти страницы необязательно должны располагаться в памяти последовательно. Поиск в обоих направлениях продолжается до тех пор, пока не произойдет одно из следующих событий:
Найдена чистая страница.
Найдено 32 страницы.
Найдена «грязная» страница, номер LSN которой еще не записан в журнал.
Найдена страница, которая не может быть немедленно заблокирована.
Таким образом, весь набор страниц может быть записан на диск всего одной операцией записи.
Непосредственно перед записью страницы к ней применяется та форма защиты страниц, которая указана в базе данных. При защите страницы от разрыва она должна быть кратковременно заблокирована для операций ввода-вывода в режиме EX (монопольный режим), поскольку защита от разрыва изменяет страницы, делая ее недоступной для чтения остальными потоками. Если применяется защита страницы по контрольной сумме или база данных не использует защиту страниц, она блокируется для операций ввода-вывода в режиме UP (блокировка на обновление). Эта блокировка предотвращает изменение страницы во время записи, но разрешает к ней доступ для чтения. Дополнительные сведения о параметрах защиты операций дискового ввода-вывода см. в разделе Управление буферами.
«Грязная» страница записывается на диск одним из трех способов.
Отложенная запись
Модуль отложенной записи — это системный процесс, который освобождает буферы, удаляя из буферного кэша редко используемые страницы. «Грязные» страницы записываются на диск первыми.
Активная запись
Во время процесса активной записи происходит запись страниц данных, связанных с операциями, не регистрируемыми в журнале (например массовой вставкой или SELECT INTO). Это позволяет создавать и записывать новые страницы параллельно. Поэтому вызывающая операция не ожидает окончания всей операции, прежде чем записать страницу на диск.
Контрольная точка
Заключается в том, что процесс контрольных точек производит периодический просмотр буферного кэша на наличие буферов со страницами определенной базы данных и запись всех «грязных» страниц на диск. Этот метод позволяет экономить время во время последующего восстановления, создавая точку, в которой все «грязные» страницы гарантированно записаны на диск. Пользователь может запросить создание контрольной точки, выполнив команду CHECKPOINT. Кроме того, компонент Database Engine может автоматически создавать контрольные точки, ориентируясь по размеру журналов и времени, прошедшему с момента создания последней контрольной точки. Помимо этого, контрольная точка создается при возникновении событий определенного рода, например когда файл журнала или файл данных добавляется или удаляется из базы данных либо при остановке экземпляра SQL Server. Дополнительные сведения см. в разделе Контрольные точки и активная часть журнала.
В режимах отложенной записи, активной записи и контрольной точки ожидание завершения операций ввода-вывода не производится. Они всегда выполняются асинхронно и параллельно с другими операциями, откладывая проверку успешности завершения операций ввода-вывода на более поздний срок. Это позволяет SQL Server максимально эффективно использовать ресурсы процессора и устройств ввода-вывода для соответствующих задач.