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

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

В этом разделе.

  • Обзор контрольных точек

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

  • См. также

Обзор контрольных точек

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

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

Название

Интерфейс Transact-SQL

Описание

Автоматические

EXEC sp_configure 'recovery interval', 'seconds'

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

Дополнительные сведения см. в разделе Настройка параметра конфигурации сервера recovery interval.

Косвенные

ALTER DATABASE … SET TARGET_RECOVERY_TIME = target_recovery_time { SECONDS | MINUTES }

Выдаются в фоновом режиме для обеспечения соответствия пользовательскому целевому времени восстановления для конкретной базы данных. Целевое время восстановления по умолчанию равно 0, что приводит к использованию эвристики автоматических контрольных точек в базе данных. Если была использована инструкция ALTER DATABASE для установки TARGET_RECOVERY_TIME в значение >0, то используется это значение, а не интервал восстановления, указанный для экземпляра сервера.

Дополнительные сведения см. в разделе Изменение целевого времени восстановления базы данных (SQL Server).

Вручную

CHECKPOINT [ checkpoint_duration ]

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

Дополнительные сведения см. в разделе CHECKPOINT (Transact-SQL).

Внутренние

Отсутствует.

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

ПримечаниеПримечание

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

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

Важное примечаниеВажно!

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

[В начало]

В этом разделе.

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

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

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

  • Внутренняя контрольная точка

Взаимодействие параметров 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, выраженным в секундах.

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

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

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

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

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

[В начало]

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

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

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

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

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

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

[В начало]

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

Косвенные контрольные точки, которые были впервые введены в SQL Server 2012, предоставляют настраиваемый на уровне базы данных вариант, альтернативный по отношению к автоматическим контрольным точкам. В случае сбоя системы косвенные контрольные точки обеспечивают восстановление за потенциально меньшее и более предсказуемое время, чем автоматические контрольные точки. Косвенные контрольные точки имеют следующие преимущества.

  • Применение косвенных контрольных точек позволяет уменьшить общее время восстановления базы данных.

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

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

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

[В начало]

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

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

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

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

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

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

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

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

[В начало]

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

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

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

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

[В начало]

См. также

[В начало]

См. также

Основные понятия

Журнал транзакций (SQL Server)