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

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Контрольная точка создает известную надежную точку, с которой Компонент SQL Server Database EngineSQL Server Database Engine может начать применение изменений, содержащихся в журнале, во время восстановления после непредвиденного отключения или аварии.A checkpoint creates a known good point from which the Компонент SQL Server Database EngineSQL Server Database Engine can start applying changes contained in the log during recovery after an unexpected shutdown or crash.

ОбзорOverview

Из соображений производительности Компонент Database EngineDatabase Engine выполняет изменения страниц базы данных в памяти (в буферном кэше) и не записывает эти страницы на диск после каждого изменения.For performance reasons, the Компонент Database EngineDatabase Engine performs modifications to database pages in memory-in the buffer cache-and does not write these pages to disk after every change. Вместо этого Компонент Database EngineDatabase Engine периодически выдает контрольную точку на каждой базе данных.Rather, the Компонент Database EngineDatabase Engine periodically issues a checkpoint on each database. Новая контрольная точка записывает текущие страницы, измененные в памяти (известные как измененные незафиксированные страницы), вместе со сведениями журнала транзакций из памяти на диск, а также сведения о журнале транзакций.A checkpoint writes the current in-memory modified pages (known as dirty pages) and transaction log information from memory to disk and, also records the information in the transaction log.

Компонент Database EngineDatabase Engine поддерживает несколько типов контрольных точек: автоматические, косвенные, ручные и внутренние.The Компонент Database EngineDatabase Engine supports several types of checkpoints: automatic, indirect, manual, and internal. Следующая таблица содержит сводку типов контрольных точек.The following table summarizes the types of checkpoints:

ИмяName Transact-SQLTransact-SQL ИнтерфейсInterface ОписаниеDescription
АвтоматическиAutomatic EXEC sp_configure ' recovery interval ',' seconds 'EXEC sp_configure ' recovery interval ','seconds' Выдаются автоматически в фоновом режиме для обеспечения соответствия верхнему пределу времени, предлагаемому параметром конфигурации сервера recovery interval .Issued automatically in the background to meet the upper time limit suggested by the recovery interval server configuration option. Автоматические контрольные точки выполняются до их завершения.Automatic checkpoints run to completion. Автоматические контрольные точки регулируются в зависимости от числа необработанных операций записи и от того, обнаруживает ли Компонент Database EngineDatabase Engine увеличение задержки при записи более чем на 50 миллисекунд.Automatic checkpoints are throttled based on the number of outstanding writes and whether the Компонент Database EngineDatabase Engine detects an increase in write latency above 50 milliseconds.

Дополнительные сведения см. в статье Configure the recovery interval Server Configuration Option.For more information, see Configure the recovery interval Server Configuration Option.
КосвенныеIndirect ALTER DATABASE ... SET TARGET_RECOVERY_TIME = target_recovery_time { SECONDS | MINUTES }ALTER DATABASE ... SET TARGET_RECOVERY_TIME =target_recovery_time { SECONDS | MINUTES } Выдаются в фоновом режиме для обеспечения соответствия пользовательскому целевому времени восстановления для конкретной базы данных.Issued in the background to meet a user-specified target recovery time for a given database. Начиная с версии SQL Server 2016 (13.x)SQL Server 2016 (13.x), значение по умолчанию равно 1 минуте.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), the default value is 1 minute. Для более старых версий по умолчанию установлено значение 0, при котором базой данных используются автоматические контрольные точки, а их частота зависит от параметра для интервала восстановления экземпляра сервера.The default is 0 for older versions, which indicates that the database will use automatic checkpoints, whose frequency depends on the recovery interval setting of the server instance.

Дополнительные сведения см. в статье Изменение целевого времени восстановления базы данных (SQL Server).For more information, see Change the Target Recovery Time of a Database (SQL Server).
ВручнуюManual CHECKPOINT [checkpoint_duration]CHECKPOINT [checkpoint_duration] Выдаются при выполнении команды Transact-SQLTransact-SQL CHECKPOINT.Issued when you execute a Transact-SQLTransact-SQL CHECKPOINT command. Ручная контрольная точка срабатывает в текущей базе данных для конкретного соединения.The manual checkpoint occurs in the current database for your connection. По умолчанию ручная контрольная точка выполняется до ее завершения.By default, manual checkpoints run to completion. Регулирование работает так же, как и для автоматической контрольной точки.Throttling works the same way as for automatic checkpoints. При необходимости параметр checkpoint_duration указывает требуемое время в секундах для завершения контрольной точки.Optionally, the checkpoint_duration parameter specifies a requested amount of time, in seconds, for the checkpoint to complete.

Дополнительные сведения см. в статье CHECKPOINT (Transact-SQL).For more information, see CHECKPOINT (Transact-SQL).
ВнутренниеInternal Нет.None. Выдаются различными операциями сервера, такими как резервное копирование и создание моментального снимка базы данных, для обеспечения соответствия образа диска текущему состоянию журнала.Issued by various server operations such as backup and database-snapshot creation to guarantee that disk images match the current state of the log.

Примечание

Расширенный параметр настройки -k SQL ServerSQL Server позволяет администратору базы данных регулировать поведение ввода-вывода контрольной точки с учетом пропускной способности подсистемы ввода-вывода для некоторых типов контрольных точек.The -k SQL ServerSQL Server advanced setup option enables a database administrator to throttle checkpoint I/O behavior based on the throughput of the I/O subsystem for some types of checkpoints. Параметр настройки -k применяется к автоматическим контрольным точкам и любым другим регулируемым ручным и внутренним контрольным точкам.The -k setup option applies to automatic checkpoints and any otherwise unthrottled manual and internal checkpoints.

Для автоматических, ручных и внутренних контрольных точек в процессе восстановления базы данных следует произвести накат только тех изменений, которые выполнены после последней контрольной точки.For automatic, manual, and internal checkpoints, only modifications made after the latest checkpoint need to be rolled forward during database recovery. Это способствует сокращению времени, необходимому для восстановления базы данных.This reduces the time required to recover a database.

Важно!

Длительные незафиксированные транзакции увеличивают время восстановления для всех типов контрольных точек.Long-running, uncommitted transactions increase recovery time for all checkpoint types.

Взаимодействие параметров TARGET_RECOVERY_TIME и «recovery interval»Interaction of the TARGET_RECOVERY_TIME and 'recovery interval' Options

Следующая таблица описывает связь между параметром сервера sp_configure' recovery interval ' и соответствующим базе данных параметром ALTER DATABASE… TARGET_RECOVERY_TIME.The following table summarizes the interaction between the server-wide sp_configure' recovery interval ' setting and the database-specific ALTER DATABASE ... TARGET_RECOVERY_TIME setting.

target_recovery_timeTARGET_RECOVERY_TIME «recovery interval»'recovery interval' Тип используемой контрольной точкиType of Checkpoint Used
00 00 автоматические контрольные точки, для которых целевой интервал восстановления равен 1 минуте.automatic checkpoints whose target recovery interval is 1 minute.
00 > 0>0 Автоматические контрольные точки, целевой интервал восстановления которых указан с помощью пользовательского параметра sp_configure 'recovery interval' .Automatic checkpoints whose target recovery interval is specified by the user-defined setting of the sp_configure 'recovery interval' option.
> 0>0 Неприменимо.Not applicable. Косвенные контрольные точки, для которых целевое время восстановления определяется параметром TARGET_RECOVERY_TIME, выраженным в секундах.Indirect checkpoints whose target recovery time is determined by the TARGET_RECOVERY_TIME setting, expressed in seconds.

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

Автоматическая контрольная точка создается каждый раз, когда число записей в журнале достигает значения, определенного Компонент Database EngineDatabase Engine в качестве предельного количества записей, которое может быть обработано за время, заданное параметром конфигурации сервера recovery interval .An automatic checkpoint occurs each time the number of log records reaches the number the Компонент Database EngineDatabase Engine estimates it can process during the time specified in the recovery interval server configuration option. Дополнительные сведения см. в статье Configure the recovery interval Server Configuration Option.For more information, see Configure the recovery interval Server Configuration Option.

В каждой базе данных без определяемого пользователем целевого времени восстановления Компонент Database EngineDatabase Engine создает автоматические контрольные точки.In every database without a user-defined target recovery time, the Компонент Database EngineDatabase Engine generates automatic checkpoints. Частота зависит от параметра расширенной конфигурации сервера recovery interval , указывающего максимальное время, которое должен использовать данный экземпляр сервера для восстановления базы данных при перезагрузке системы.The frequency depends on the recovery interval advanced server configuration option, which specifies the maximum time that a given server instance should use to recover a database during a system restart. Компонент Database EngineDatabase Engine определяет максимальное число записей журнала, которое он может обработать в пределах интервала восстановления.The Компонент Database EngineDatabase Engine estimates the maximum number of log records it can process within the recovery interval. Когда база данных, использующая автоматические контрольные точки, достигает данного максимального числа записей журнала, Компонент Database EngineDatabase Engine выдает контрольную точку базы данных.When a database using automatic checkpoints reaches this maximum number of log records, the Компонент Database EngineDatabase Engine issues an checkpoint on the database.

Интервал времени между автоматическими контрольными точками может сильно изменяться.The time interval between automatic checkpoints can be highly variable. В базе данных со значительной транзакционной рабочей нагрузкой контрольные точки будут устанавливаться более часто, чем в базе данных, используемой преимущественно для операций только для чтения.A database with a substantial transaction workload will have more frequent checkpoints than a database used primarily for read-only operations. Кроме того, в простой модели восстановления автоматическая контрольная точка становится в очередь, если журнал заполняется на 70 процентов.Under the simple recovery model, an automatic checkpoint is also queued if the log becomes 70 percent full.

В простой модели восстановления применение автоматической контрольной точки приводит к усечению неиспользуемого раздела журнала транзакций, если усечение журнала не откладывается под действием какого-то фактора.Under the simple recovery model, unless some factor is delaying log truncation, an automatic checkpoint truncates the unused section of the transaction log. В отличие от этого, в полной модели восстановления и модели восстановления с неполным протоколированием после установления цепочки резервных копий журнала применение автоматических контрольных точек не вызывает усечение журнала.By contrast, under the full and bulk-logged recovery models, once a log backup chain has been established, automatic checkpoints do not cause log truncation. Дополнительные сведения см. в статье Журнал транзакций (SQL Server).For more information, see The Transaction Log (SQL Server).

После сбоя системы продолжительность времени, требуемого для восстановления данной базы данных, в большой степени зависит от непредсказуемо изменяющегося количества операций ввода-вывода, требуемых для повтора измененных страниц, которые не были зафиксированы ко времени сбоя.After a system crash, the length of time required to recover a given database depends largely on the amount of random I/O needed to redo pages that were dirty at the time of the crash. Это означает, что параметр recovery interval является ненадежным.This means that the recovery interval setting is unreliable. Он не позволяет определить точную продолжительность восстановления.It cannot determine an accurate recovery duration. Более того, при выполнении автоматической контрольной точки общее количество операций ввода-вывода, относящихся к данным, увеличивается значительно и довольно непредсказуемо.Furthermore, when an automatic checkpoint is in progress, the general I/O activity for data increases significantly and quite unpredictably.

Влияние интервала восстановления на производительность восстановленияImpact of recovery interval on recovery performance

Для системы оперативной обработки транзакций (OLTP) при использовании коротких транзакций параметр recovery interval является основным фактором, определяющим время восстановления.For an online transaction processing (OLTP) system using short transactions, recovery interval is the primary factor determining recovery time. Тем не менее параметр recovery interval не влияет на количество времени, необходимого для отмены длительной транзакции.However, the recovery interval option does not affect the time required to undo a long-running transaction. Восстановление базы данных с длительной транзакцией может потребовать гораздо больше времени, чем указано в параметре recovery interval.Recovery of a database with a long-running transaction can take much longer than the time specified in the recovery interval setting.

Например, если в длительной транзакции потребовалось бы два часа для проведения обновлений до того, как экземпляр сервера станет недоступным, то для фактического восстановления потребуется значительно больше времени, чем обозначено параметром recovery interval , на восстановление этой длительной транзакции.For example, if a long-running transaction took two hours to perform updates before the server instance became disabled, the actual recovery takes considerably longer than the recovery interval value to recover the long transaction. Дополнительные сведения о влиянии длительных транзакций на время восстановления см. в статье Журнал транзакций (SQL Server).For more information about the impact of a long running transaction on recovery time, see The Transaction Log (SQL Server).

Как правило, значения по умолчанию обеспечивают оптимальную производительность восстановления.Typically, the default values provides optimal recovery performance. Однако изменение интервала восстановления может способствовать повышению производительности в следующих случаях.However, changing the recovery interval might improve performance in the following circumstances:

  • Если восстановление обычно занимает намного больше 1 минуты при отсутствии отката длительных транзакций.If recovery routinely takes significantly longer than 1 minute when long-running transactions are not being rolled back.

  • Если обнаружено, что из-за более частого выполнения контрольных точек производительность базы данных снижается.If you notice that frequent checkpoints are impairing performance on a database.

Если принято решение увеличить параметр recovery interval , то рекомендуется увеличивать его постепенно с небольшими приращениями и оценивать влияние каждого приращения на производительность восстановления.If you decide to increase the recovery interval setting, we recommend increasing it gradually by small increments and evaluating the effect of each incremental increase on recovery performance. Этот подход важен, потому что при увеличении значения параметра recovery interval время восстановления базы данных увеличивается пропорционально указанному значению.This approach is important because as the recovery interval setting increases, database recovery takes that many times longer to complete. Например, если изменяется значение параметра recovery interval , равное 10 минутам, то время выполнения восстановления увеличится приблизительно в 10 раз по сравнению со значением recovery interval , установленным равным 1 минуте.For example, if you change recovery interval to 10 minutes, recovery takes approximately 10 times longer to complete than when recovery interval is set to 1 minute.

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

Косвенные контрольные точки, которые были впервые введены в SQL Server 2012 (11.x)SQL Server 2012 (11.x), предоставляют настраиваемую на уровне баз данных альтернативу автоматическим контрольным точкам.Indirect checkpoints, introduced in SQL Server 2012 (11.x)SQL Server 2012 (11.x), provide a configurable database-level alternative to automatic checkpoints. Их можно настроить, задав параметр конфигурации базы данных целевое время восстановления.This can be configured by specifying the target recovery time database configuration option. Дополнительные сведения см. в разделе Изменение целевого времени восстановления базы данных (SQL Server).For more information, see Change the Target Recovery Time of a Database (SQL Server). В случае сбоя системы косвенные контрольные точки обеспечивают восстановление за потенциально меньшее и более предсказуемое время, чем автоматические контрольные точки.In the event of a system crash, indirect checkpoints provide potentially faster, more predictable recovery time than automatic checkpoints. Косвенные контрольные точки имеют следующие преимущества.Indirect checkpoints offer the following advantages:

  • В базе данных, которая настроена на использование косвенных контрольных точек, может снизиться производительность обработки транзакционной нагрузки в режиме "в сети".An online transactional workload on a database configured for indirect checkpoints can experience performance degradation. Косвенные конечные точки сохраняют количество "грязных" страниц ниже определенного порогового значения, чтобы восстановление базы данных выполнялось в течение заданного времени восстановления.Indirect checkpoints ensure that the number of dirty pages are below a certain threshold so the database recovery completes within the target recovery time.

Параметр конфигурации recovery interval использует количество транзакций для определения времени восстановления вместо косвенных контрольных точек, которые основываются на количестве "грязных" страниц.The recovery interval configuration option uses the number of transactions to determine the recovery time, as opposed to indirect checkpoints which makes use of the number of dirty pages. Если косвенные конечные точки включены в базе данных, получающей большое число операций DML, средство фоновой записи может начать агрессивно сбрасывать «грязные» буферы обмена на диск, чтобы гарантировать, что время, необходимое для выполнения восстановления, находится в пределах целевого периода восстановления базы данных.When indirect checkpoints are enabled on a database receiving a large number of DML operations, the background writer can start aggressively flushing dirty buffers to disk to ensure that the time required to perform recovery is within the target recovery time set of the database. Это может вызвать дополнительную активность операций ввода-вывода в определенных системах, что способно привести к созданию узких мест с точки зрения производительности, если подсистема диска превысила пороговое значение операций ввода-вывода или приближается к нему.This can cause additional I/O activity on certain systems which can contribute to a performance bottleneck if the disk subsystem is operating above or nearing the I/O threshold.

  • Косвенные контрольные точки позволяют надежно управлять временем восстановления базы данных, поскольку устраняются затраты времени на ввод-вывод с непредсказуемым объемом при выполнении операций REDO.Indirect checkpoints enable you to reliably control database recovery time by factoring in the cost of random I/O during REDO. Это позволяет экземпляру сервера оставаться в пределах верхних границ времени восстановления для каждой конкретной базы данных (кроме тех случаев, когда из-за длительной транзакции чрезмерно возрастает время выполнения операций UNDO).This enables a server instance to stay within an upper-bound limit on recovery times for a given database (except when a long-running transaction causes excessive UNDO times).

  • При использовании косвенных контрольных точек снижаются пиковые объемы ввода-вывода, вызванные выполнением контрольных точек, поскольку измененные незафиксированные страницы постоянно записываются на диск в фоновом режиме.Indirect checkpoints reduce checkpoint-related I/O spiking by continually writing dirty pages to disk in the background.

При этом в базе данных, которая настроена на использование косвенных контрольных точек, может снизиться производительность обработки транзакционной нагрузки в режиме "в сети".However, an online transactional workload on a database configured for indirect checkpoints can experience performance degradation. Это происходит из-за того, что фоновый модуль записи, используемый косвенной контрольной точкой, иногда увеличивает общую, связанную с записью нагрузку для экземпляра сервера.This is because the background writer used by indirect checkpoint sometimes increases the total write load for a server instance.

Важно!

Косвенные контрольные точки используются по умолчанию для всех новых баз данных (включая шаблоны и TempDB), созданных в SQL Server 2016 (13.x)SQL Server 2016 (13.x).Indirect checkpoint is the default behavior for new databases created in SQL Server 2016 (13.x)SQL Server 2016 (13.x), including the Model and TempDB databases.
Базы данных, которые были обновлены по месту или восстановлены из предыдущих версий SQL ServerSQL Server, будут использовать прежний режим автоматических контрольных точек, пока он не будет явно изменен на режим косвенных контрольных точек.Databases that were upgraded in-place, or restored from a previous version of SQL ServerSQL Server, will use the previous automatic checkpoint behavior unless explicitly altered to use indirect checkpoint.

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

В версиях до SQL Server 2019SQL Server 2019 пользователи могут сталкиваться с ошибками невыполнения в планировщике при наличии базы данных, которая создает большое количество "грязных" страниц, такой как tempdb.Prior to SQL Server 2019SQL Server 2019, you may experience non-yielding scheduler errors when there is a database that generates a large number of dirty pages, such as tempdb. SQL Server 2019SQL Server 2019 предоставляет улучшенную масштабируемость косвенных контрольных точек, что должно помочь избежать подобных ошибок в базах данных с высокой рабочей нагрузкой вида UPDATE/INSERT.introduces improved scalability for indirect checkpoint, which should help avoid these errors on databases that have a heavy UPDATE/INSERT workload.

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

Внутренние контрольные точки создаются различными компонентами сервера для обеспечения того, чтобы образ диска соответствовал текущему состоянию журнала.Internal Checkpoints are generated by various server components to guarantee that disk images match the current state of the log. Внутренние контрольные точки создаются в ответ на следующие события.Internal checkpoint are generated in response to the following events:

  • При добавлении или удалении файлов баз данных с использованием инструкции ALTER DATABASE.Database files have been added or removed by using ALTER DATABASE.

  • При создании резервной копии базы данных.A database backup is taken.

  • Явное или внутреннее создание моментального снимка базы данных для команды DBCC CHECKDB.A database snapshot is created, whether explicitly or internally for DBCC CHECKDB.

  • При выполнении действия, требующего отключения базы данных.An activity requiring a database shutdown is performed. Примерами могут служить присвоение параметру AUTO_CLOSE значения ON и закрытие последнего соединения пользователя с базой данных или изменение параметра базы данных, требующее перезапуска базы данных.For example, AUTO_CLOSE is ON and the last user connection to the database is closed, or a database option change is made that requires a restart of the database.

  • Экземпляр SQL ServerSQL Server останавливается путем остановки службы SQL ServerSQL Server (MSSQLSERVER).An instance of SQL ServerSQL Server is stopped by stopping the SQL ServerSQL Server (MSSQLSERVER) service . И в том и в другом случае будет создана контрольная точка для каждой базы данных в экземпляре SQL ServerSQL Server.Either action causes a checkpoint in each database in the instance of SQL ServerSQL Server.

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

Related tasksRelated tasks

Изменение интервала восстановления на экземпляре сервераTo change the recovery interval on a server instance

Настройка косвенных контрольных точек в базе данныхTo configure indirect checkpoints on a database

Выдача команды на создание контрольной точки в базе данных вручнуюTo issue a manual checkpoint on a database

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

Журнал транзакций (SQL Server) The Transaction Log (SQL Server)
Физическая архитектура журнала транзакций (из электронной документации SQL Server 2008 R2SQL Server 2008 R2 ; по-прежнему действует)Transaction Log Physical Architecture (From SQL Server 2008 R2SQL Server 2008 R2 Books Online but still applicable!)