CHECKPOINT (Transact-SQL)

現在のデータベースのすべてのダーティ ページをディスクに書き込みます。ダーティ ページとは、バッファー キャッシュに入力されたり変更されたりしても、ディスクに書き込まれていないデータ ページのことです。チェックポイントは、すべてのダーティ ページがディスクに書き込まれたことを確認するために作成されるポイントで、その後の復旧の時間を短縮します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

CHECKPOINT [ checkpoint_duration ]

引数

  • checkpoint_duration
    チェックポイントを完了するのに必要な時間を秒単位で指定します。checkpoint_duration を指定すると、SQL Server データベース エンジンは、要求された時間内にチェックポイントを実行しようとします。checkpoint_duration は、データ型が int の式で、0 より大きい値にする必要があります。このパラメーターを省略すると、SQL Server データベース エンジンでは、データベース アプリケーションのパフォーマンスに与える影響が最小限になるように、チェックポイントの持続時間が自動的に調整されます。

    注意

    SQL Server 2000 では、チェックポイント処理の時間枠は sp_configure RECOVERY INTERVAL 設定を基に設定されました。

説明

パフォーマンス向上のため、データベース エンジンでは、メモリにあるデータベース ページが変更されるようになり、ページが変更されるたびにディスクに書き込まれることはなくなりました。ただし、データベース エンジンでは、チェックポイントを実行してこれらのダーティ ページをディスクに書き込む必要があります。ダーティ ページをディスクに書き込むことによって、予期しないシャットダウンやクラッシュの後の復旧中に、ログに格納されている変更をデータベース エンジンが適用するための最適なポイントを取得することができます。詳細については、「チェックポイントとログのアクティブな部分」を参照してください。

チェックポイントは、データベースの数にかかわらず同時に実行できます。

データベース エンジンでは、中断されたチェックポイントからの復旧はできません。チェックポイントが中断されていて、復旧が必要な場合は、データベース エンジンは前回の成功したチェックポイントから復旧を開始する必要があります。

チェックポイントが実行されるイベント

データベース エンジンは、データベース バックアップの前に、自動的にチェックポイントを実行します。これによって、データベース ページのすべての変更がバックアップに取り込まれます。さらに、次のいずれかの状態になった場合、チェックポイントは自動的に実行されます。

  • ログのアクティブ部分が、recoveryinterval サーバー構成オプションの指定時間内にサーバーが復旧できるサイズを超えている。

  • ログが全体の 70% まで達しており、データベースがログ切り捨てモードになった場合。

    データベースがログ切り捨てモードになるのは、次の 2 つの条件が TRUE である場合です。1 つは、データベースが単純復旧モデルを使用している場合、もう 1 つは、前回データベースを参照した BACKUP DATABASE ステートメントの実行後に、次のいずれかのイベントが発生した場合です。

    • データベースで最小限のログ操作が実行された。たとえば、最小限のログの一括コピー操作や、最小限のログの WRITETEXT ステートメントが実行された場合など。

    • データベースにファイルを追加または削除する ALTER DATABASE ステートメントが実行された。

また、サーバーが停止しても、サーバーにあるデータベースごとにチェックポイントが実行されます。次の方法で SQL Server を停止させると、データベースごとにチェックポイントが実行されます。

  • SQL Server 構成マネージャーを使用する。

  • SQL Server Management Studio を使用する。

  • SHUTDOWN ステートメントを使用する。

注意

SHUTDOWN WITH NOWAIT ステートメントを実行すると、各データベース内でチェックポイントが実行されずに SQL Server がシャットダウンします。この場合、次に再起動するときに、サーバー上のデータベースを復旧するのにいつもより長い時間がかかる可能性があります。

  • コマンド プロンプト ウィンドウで、net stop mssqlserver コマンドを使用する。

  • [コントロール パネル] の [サービス] で、[mssqlserver] を選択し [停止] をクリックする。

  • クラスター内でインスタンスをオフラインにする。

チェックポイントの操作時間に影響を与える要因

通常、書き込む必要のあるダーティ ページの数が増えると、チェックポイント操作に必要とされる時間が長くなります。他のアプリケーションのパフォーマンスに与える影響を最小にするため、既定では、SQL Server によってチェックポイント操作による書き込み頻度が調節されます。SQL Server では、この方法に基づいて、自動チェックポイントと、checkpoint_duration 値を指定しない CHECKPOINT ステートメントが実行されます。書き込みの頻度が減ると、チェックポイント操作の完了に必要な時間は長くなります。

checkpoint_duration を使用すると、特定の時間内にチェックポイント操作を完了するように要求できます。checkpoint_duration の使用によるパフォーマンスへの影響は、ダーティ ページの数、システムにあるアクティビティ、実際に指定された時間によって異なります。たとえば、通常、チェックポイントが 120 秒で完了する場合、checkpoint_duration を 45 秒に設定すると、SQL Server によって、既定で割り当てられるリソースよりも多くのリソースがチェックポイントに割り当てられます。逆に、checkpoint_duration を 180 秒に指定すると、SQL Server では、既定で割り当てられるリソースよりも少ないリソースしか割り当てられません。一般に、checkpoint_duration が短いとチェックポイントに割り当てるリソースが増え、checkpoint_duration が長いとチェックポイントに割り当てるリソースが減ります。SQL Server は、常に可能な限りチェックポイントを完了し、チェックポイントが完了するとすぐに CHECKPOINT ステートメントによって値が返されます。したがってチェックポイントの完了は、状況に応じて、指定した時間よりも早まったり、遅くなることがあります。

権限

CHECKPOINT 権限は、既定では、sysadmin 固定サーバー ロール、db_owner 固定データベース ロール、および db_backupoperator 固定データベース ロールのメンバーに与えられており、この権限は譲渡できません。