Контрольные точки базы данных (SQL Server)

Область применения:yesSQL Server (все поддерживаемые версии) YesБаза данных SQL Azure

Контрольная точка создает известную хорошую точку, с которой ядро СУБД SQL Server может начать применять изменения, содержащиеся в журнале во время восстановления после непредвиденного завершения работы или сбоя.

Общие сведения

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

Ядро СУБД поддерживает несколько типов контрольных точек: автоматических, косвенных, ручных и внутренних. Следующая таблица содержит сводку типов контрольных точек.

Имя Интерфейс Transact-SQL Описание
Автоматически EXEC sp_configure "интервал восстановления","секунды" Выдаются автоматически в фоновом режиме для обеспечения соответствия верхнему пределу времени, предлагаемому параметром конфигурации сервера recovery interval . Автоматические контрольные точки выполняются до их завершения. Автоматические контрольные точки регулируются в зависимости от количества незавершенных операций записи и того, обнаруживает ли ядро СУБД увеличение задержки записи выше 50 миллисекунд.

Дополнительные сведения см. в статье Configure the recovery interval Server Configuration Option.
Косвенные ALTER DATABASE ... SET TARGET_RECOVERY_TIME =target_recovery_time { SECONDS | MINUTES } Выдаются в фоновом режиме для обеспечения соответствия пользовательскому целевому времени восстановления для конкретной базы данных. Начиная с SQL Server 2016 (13.x), значение по умолчанию — 1 минута. Для более старых версий по умолчанию установлено значение 0, при котором базой данных используются автоматические контрольные точки, а их частота зависит от параметра для интервала восстановления экземпляра сервера.

Дополнительные сведения см. в разделе Изменение целевого времени восстановления базы данных (SQL Server).
Вручную CHECKPOINT [checkpoint_duration] Выдано при выполнении команды Transact-SQL CHECKPOINT. Ручная контрольная точка срабатывает в текущей базе данных для конкретного соединения. По умолчанию ручная контрольная точка выполняется до ее завершения. Регулирование работает так же, как и для автоматической контрольной точки. При необходимости параметр checkpoint_duration указывает требуемое время в секундах для завершения контрольной точки.

Дополнительные сведения см. в разделе CHECKPOINT (Transact-SQL).
Внутренние Нет. Выдаются различными операциями сервера, такими как резервное копирование и создание моментального снимка базы данных, для обеспечения соответствия образа диска текущему состоянию журнала.

Примечание

Параметр расширенной настройки SQL Server позволяет администратору базы данных регулировать поведение операций ввода-вывода контрольных точек на основе пропускной способности подсистемы ввода-вывода для некоторых типов контрольных точек. Параметр настройки -k применяется к автоматическим контрольным точкам и любым другим регулируемым ручным и внутренним контрольным точкам.

Для автоматических, ручных и внутренних контрольных точек в процессе восстановления базы данных следует произвести накат только тех изменений, которые выполнены после последней контрольной точки. Это способствует сокращению времени, необходимому для восстановления базы данных.

Важно!

Длительные незафиксированные транзакции увеличивают время восстановления для всех типов контрольных точек.

Взаимодействие параметров TARGET_RECOVERY_TIME и «recovery interval»

Следующая таблица описывает связь между параметром сервера sp_configure' recovery interval ' и соответствующим базе данных параметром ALTER DATABASE ... TARGET_RECOVERY_TIME.

target_recovery_time «recovery interval» Тип используемой контрольной точки
0 0 автоматические контрольные точки, для которых целевой интервал восстановления равен 1 минуте.
0 >0 Автоматические контрольные точки, целевой интервал восстановления которых указан с помощью пользовательского параметра sp_configure 'recovery interval' .
>0 Неприменимо. Косвенные контрольные точки, для которых целевое время восстановления определяется параметром TARGET_RECOVERY_TIME, выраженным в секундах.

Автоматические контрольные точки

Автоматическая контрольная точка возникает каждый раз, когда количество записей журнала достигает числа, которое оценивает ядро СУБД, которое может обрабатываться в течение времени, указанного в параметре конфигурации сервера интервала восстановления . Дополнительные сведения см. в статье Configure the recovery interval Server Configuration Option.

В каждой базе данных без определяемого пользователем целевого времени восстановления ядро СУБД создает автоматические контрольные точки. Частота зависит от параметра расширенной конфигурации сервера recovery interval , указывающего максимальное время, которое должен использовать данный экземпляр сервера для восстановления базы данных при перезагрузке системы. Ядро СУБД оценивает максимальное количество записей журнала, которые он может обрабатывать в течение интервала восстановления. Когда база данных, использующий автоматические контрольные точки, достигает этого максимального количества записей журнала, ядро СУБД выдает контрольную точку в базе данных.

Интервал времени между автоматическими контрольными точками может сильно изменяться. В базе данных со значительной транзакционной рабочей нагрузкой контрольные точки будут устанавливаться более часто, чем в базе данных, используемой преимущественно для операций только для чтения. Кроме того, в простой модели восстановления автоматическая контрольная точка становится в очередь, если журнал заполняется на 70 процентов.

В простой модели восстановления применение автоматической контрольной точки приводит к усечению неиспользуемого раздела журнала транзакций, если усечение журнала не откладывается под действием какого-то фактора. В отличие от этого, в полной модели восстановления и модели восстановления с неполным протоколированием после установления цепочки резервных копий журнала применение автоматических контрольных точек не вызывает усечение журнала. Дополнительные сведения см. в статье Журнал транзакций (SQL Server).

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

Влияние интервала восстановления на производительность восстановления

Для системы оперативной обработки транзакций (OLTP) при использовании коротких транзакций параметр recovery interval является основным фактором, определяющим время восстановления. Тем не менее параметр recovery interval не влияет на количество времени, необходимого для отмены длительной транзакции. Восстановление базы данных с длительной транзакцией может потребовать гораздо больше времени, чем указано в параметре recovery interval.

Например, если в длительной транзакции потребовалось бы два часа для проведения обновлений до того, как экземпляр сервера станет недоступным, то для фактического восстановления потребуется значительно больше времени, чем обозначено параметром recovery interval , на восстановление этой длительной транзакции. Дополнительные сведения о влиянии длительной транзакции на время восстановления см. в журнале транзакций (SQL Server). Дополнительные сведения о процессе восстановления см. в статье Обзор процессов восстановления (SQL Server).

Как правило, значения по умолчанию обеспечивают оптимальную производительность восстановления. Однако изменение интервала восстановления может способствовать повышению производительности в следующих случаях.

  • Если восстановление обычно занимает намного больше 1 минуты при отсутствии отката длительных транзакций.

  • Если обнаружено, что из-за более частого выполнения контрольных точек производительность базы данных снижается.

Если принято решение увеличить параметр recovery interval , то рекомендуется увеличивать его постепенно с небольшими приращениями и оценивать влияние каждого приращения на производительность восстановления. Этот подход важен, потому что при увеличении значения параметра recovery interval время восстановления базы данных увеличивается пропорционально указанному значению. Например, если изменяется значение параметра recovery interval , равное 10 минутам, то время выполнения восстановления увеличится приблизительно в 10 раз по сравнению со значением recovery interval , установленным равным 1 минуте.

Косвенные контрольные точки

Косвенные контрольные точки, представленные в SQL Server 2012 (11.x), предоставляют настраиваемую альтернативу уровня базы данных автоматическим контрольным точкам. Их можно настроить, задав параметр конфигурации базы данных целевое время восстановления. Дополнительные сведения см. в разделе Изменение целевого времени восстановления базы данных (SQL Server). В случае сбоя системы косвенные контрольные точки обеспечивают восстановление за потенциально меньшее и более предсказуемое время, чем автоматические контрольные точки. Косвенные контрольные точки имеют следующие преимущества.

  • В базе данных, которая настроена на использование косвенных контрольных точек, может снизиться производительность обработки транзакционной нагрузки в режиме "в сети". Косвенные конечные точки сохраняют количество "грязных" страниц ниже определенного порогового значения, чтобы восстановление базы данных выполнялось в течение заданного времени восстановления.

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

  • Косвенные контрольные точки позволяют надежно управлять временем восстановления базы данных, поскольку устраняются затраты времени на ввод-вывод с непредсказуемым объемом при выполнении операций REDO. Это позволяет экземпляру сервера оставаться в пределах верхних границ времени восстановления для каждой конкретной базы данных (кроме тех случаев, когда из-за длительной транзакции чрезмерно возрастает время выполнения операций UNDO).

  • При использовании косвенных контрольных точек снижаются пиковые объемы ввода-вывода, вызванные выполнением контрольных точек, поскольку измененные незафиксированные страницы постоянно записываются на диск в фоновом режиме.

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

Важно!

Непрямая контрольная точка — это поведение по умолчанию для новых баз данных, созданных в SQL Server 2016 (13.x), включая базы данных Model и TempDB.
Базы данных, которые были обновлены на месте или восстановлены из предыдущей версии SQL Server, будут использовать предыдущее поведение автоматической контрольной точки, если явно не изменено для использования непрямой контрольной точки.

Улучшена масштабируемость косвенных контрольных точек.

До SQL Server 2019 (15.x) могут возникать ошибки планировщика, которые не дают результатов при наличии базы данных, которая создает большое количество грязных страниц, таких как tempdb. SQL Server 2019 (15.x) предоставляет улучшенную масштабируемость для непрямой контрольной точки, что должно помочь избежать этих ошибок в базах данных с высокой UPDATE/INSERT рабочей нагрузкой.

Внутренние контрольные точки

Внутренние контрольные точки создаются различными компонентами сервера для обеспечения того, чтобы образ диска соответствовал текущему состоянию журнала. Внутренние контрольные точки создаются в ответ на следующие события.

  • При добавлении или удалении файлов баз данных с использованием инструкции ALTER DATABASE.

  • При создании резервной копии базы данных.

  • Явное или внутреннее создание моментального снимка базы данных для команды DBCC CHECKDB.

  • При выполнении действия, требующего отключения базы данных. Примерами могут служить присвоение параметру AUTO_CLOSE значения ON и закрытие последнего соединения пользователя с базой данных или изменение параметра базы данных, требующее перезапуска базы данных.

  • Экземпляр SQL Server останавливается путем остановки службы SQL Server (MSSQLSERVER). Это действие вызывает контрольную точку в каждой базе данных в экземпляре SQL Server.

  • Перенос экземпляра отказоустойчивого кластера SQL Server (FCI) в автономный режим.

Связанные задачи

Изменение интервала восстановления на экземпляре сервера

Настройка косвенных контрольных точек в базе данных

Выдача команды на создание контрольной точки в базе данных вручную

См. также раздел

Журнал транзакций (SQL Server)
Руководство по архитектуре журнала транзакций SQL Server и управлению им