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

Область применения: SQL Server База данных SQL Azure

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

Обзор

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

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

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

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

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

Дополнительные сведения см. в разделе КОНТРОЛЬНАЯ ТОЧКА (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.

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

Интервал времени между автоматическими контрольными точками может сильно изменяться. В базе данных со значительной транзакционной рабочей нагрузкой контрольные точки будут устанавливаться более часто, чем в базе данных, используемой преимущественно для операций только для чтения. Кроме того, в простой модели восстановления автоматическая контрольная точка становится в очередь, если журнал заполняется на 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.

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

Следующие шаги

См. также