データベース チェックポイント (SQL Server)Database Checkpoints (SQL Server)

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

チェックポイント によって、予期しないシャットダウンやクラッシュの後の復旧中に、ログに格納されている変更を SQL Server データベース エンジンSQL Server Database Engine が適用するための最適なポイントが作成されます。A checkpoint creates a known good point from which the SQL Server データベース エンジンSQL Server Database Engine can start applying changes contained in the log during recovery after an unexpected shutdown or crash.

概要Overview

パフォーマンス向上のため、データベース エンジンDatabase Engine では、メモリ (バッファー キャッシュ) にあるデータベース ページが変更されるようになり、ページが変更されるたびにディスクに書き込まれることはなくなりました。For performance reasons, the データベース エンジンDatabase Engine performs modifications to database pages in memory-in the buffer cache-and does not write these pages to disk after every change. また、 データベース エンジンDatabase Engine では定期的に各データベースにチェックポイントが発行されます。Rather, the データベース エンジンDatabase 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 Engine では、自動、間接、手動、および内部といったチェックポイントの種類がサポートされています。The データベース エンジンDatabase 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. 自動チェックポイントは、未処理の書き込み数と、50 ミリ秒を超える書き込み待機時間の上昇を データベース エンジンDatabase Engine が検出したかどうかに応じて調整されます。Automatic checkpoints are throttled based on the number of outstanding writes and whether the データベース エンジンDatabase Engine detects an increase in write latency above 50 milliseconds.

詳細については、「 recovery interval サーバー構成オプションの構成」を参照してください。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).
InternalInternal [なし] :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 の詳細設定オプションを使用して、I/O サブシステムのスループットに基づいてチェックポイントの I/O 動作を調整できます。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 Engine recovery interval サーバー構成オプションで指定された時間内に処理できると が推定した数に達したときです。An automatic checkpoint occurs each time the number of log records reaches the number the データベース エンジンDatabase Engine estimates it can process during the time specified in the recovery interval server configuration option. 詳細については、「 recovery interval サーバー構成オプションの構成」を参照してください。For more information, see Configure the recovery interval Server Configuration Option.

ユーザー定義のターゲット復旧時間が設定されていないすべてのデータベースでは、 データベース エンジンDatabase Engine によって自動チェックポイントが生成されます。In every database without a user-defined target recovery time, the データベース エンジンDatabase 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 Engine は、復旧間隔内に処理できるログ レコードの最大数を推定します。The データベース エンジンDatabase Engine estimates the maximum number of log records it can process within the recovery interval. 自動チェックポイントを使用するデータベースのログ レコードが最大数に達すると、 データベース エンジンDatabase Engine によってデータベースでチェックポイントが発行されます。When a database using automatic checkpoints reaches this maximum number of log records, the データベース エンジンDatabase 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).

システム障害の後で所定のデータベースの復旧に必要な時間は、障害発生時点でのダーティ ページを再実行するために必要なランダム I/O の容量に大きく依存します。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. さらに、自動チェックポイントの進行中に、データの一般的な I/O アクティビティが急に著しく増加します。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.

たとえば、実行時間の長いトランザクションが 2 時間かけて更新した後にサーバー インスタンスが使用不能になった場合、長いトランザクションを復旧することになるので、実際の復旧時間は 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. ただし、次のような状況では recovery interval を変更するとパフォーマンスが向上する可能性があります。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 分に変更すると、復旧には recovery interval が 1 分に設定された場合の約 10 倍かかります。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.

復旧間隔構成オプションでは、ダーティ ページ数を使用する間接チェックポイントとは異なり、トランザクション数を使用して復旧時間を決定します。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. これにより、ディスクのサブシステムが I/O のしきい値よりも高い動作をするかまたはその値に近づいた場合、パフォーマンス ボトルネックの原因となる追加の I/O アクティビティが特定のシステムで発生する可能性があります。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 時のランダム I/O のコストを計算に入れて、データベースの復旧時間を確実に制御できます。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).

  • 間接チェックポイントでは、ディスクへのダーティ ページの書き込みがバックグラウンドで続けられるため、チェックポイントに関連する I/O の急上昇が少なくなります。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.

重要

間接チェックポイントは、Model データベースや 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 (MSSQLSERVER) サービスを停止することによって、 SQL ServerSQL Server のインスタンスが停止します。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 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!)