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

Применимо к:база данных SQL ServerAzure SQL

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

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

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

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

Имя Интерфейс Transact-SQL Описание
Автоматически EXEC sp_configure "интервал восстановления", "секунды" Выдаются автоматически в фоновом режиме для обеспечения соответствия верхнему пределу времени, предлагаемому параметром конфигурации сервера recovery interval . Автоматические контрольные точки выполняются до их завершения. Автоматические контрольные точки регулируются в зависимости от количества невыполненных операций записи и того, обнаруживает ли компонент Компонент Database Engine увеличение задержки записи выше 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).
Внутренний Нет Выдаются различными операциями сервера, такими как резервное копирование и создание моментального снимка базы данных, для обеспечения соответствия образа диска текущему состоянию журнала.

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

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

Важно!

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

Взаимодействие параметров TARGET_RECOVERY_TIME и интервала восстановления

В следующей таблице представлено взаимодействие между параметром на уровне 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.

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

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

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

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

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

Для системы оперативной обработки транзакций (OLTP) при использовании коротких транзакций параметр 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.

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

Дальнейшие действия

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