印刷用ページ       送信     
クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
SQL Server
Microsoft SQL Server 2000
SDK ドキュメント
 チェックポイントとログのアクティブ部分

  低帯域幅での表示をオンにする
SQL Server のアーキテクチャ
チェックポイントとログのアクティブ部分

チェックポイントとログのアクティブ部分

チェックポイントを使用すると、データベースの全面復旧のときに処理する必要があるログの部分を最小にできます。全面復旧のときには、次の 2 種類の操作を行う必要があります。

  • ログには、システムが停止する前にディスクにフラッシュされなかった修正レコードが含まれる場合があります。それらの修正をロールフォワードする必要があります。

  • 未完のトランザクション、つまり COMMIT または ROLLBACK のどちらのログ レコードもないトランザクションに関連付けられたすべての修正をロールバックする必要があります。

チェックポイントは現在のデータベースのバッファ キャッシュに入っているダーティなデータとログ ページをフラッシュし、復旧のときにロールフォワードが必要となる修正の数を最小にします。

SQL Server 2000 のチェックポイントはカレントデータベースで以下の処理を実行します。

  • チェックポイントの開始のマークが付いているレコードをログ ファイルに書き込みます。

  • チェックポイント用に記録された情報をチェックポイント ログ レコードのチェーン内に格納します。このチェーンの開始の LSN はデータベース ブート ページに書き込まれます。

  • チェックポイント レコードに記録される情報の 1 つが最初のログ イメージの LSN であり、これはデータベース全体でロールバックが正常に実行されるために必要です。この LSN は最小復旧 LSN (MinLSN) と呼ばれ、次のものの最小値です。
    • チェックポイントの開始の LSN

    • 最も古いアクティブ トランザクションの開始の LSN

    • まだすべてのサブスクライバにレプリケートされていない最も古いレプリケーション トランザクションの開始の LSN
  • チェックポイント レコードに記録されるもう 1 つの情報は、未解決でアクティブなトランザクションすべての一覧です。

  • データベースで単純な復旧モデルを使用している場合は、新しい MinLSN より前にあるログ レコードをすべて削除します。

  • すべてのダーティ ログとデータ ページをディスクに書き込みます。

  • チェックポイントの最後のマークが付いているレコードをログ ファイルに書き込みます。

ログ ファイルの MinLSN から最後に書き込まれたログ レコードまでの部分を、ログのアクティブ部分と呼びます。このアクティブ部分は、データベースの全面復旧を行う必要があります。アクティブ ログの部分を切り捨てることはできません。ログの切り捨ては、MinLSN より前にあるログの部分から行うために必要とされる部分です。

次の図は、2 つのトランザクションがあるトランザクション ログの末尾を単純化して示したものです。チェックポイント レコードは短縮されて単一のレコードになっています。

LSN 148 はトランザクション ログ内の最後のレコードです。LSN 147 に記録されたチェックポイントが処理された時点では、Tran 1 は既にコミットされており、Tran 2 だけがアクティブ トランザクションでした。このため、Tran 2 用の最初のログ レコードが、前回のチェックポイントの時点でアクティブだったトランザクションの最も古いログ レコードです。したがって LSN 142、つまり Tran 2 用の begin トランザクション レコードが MinLSN です。

チェックポイントは次の場合に発生します。

  • CHECKPOINT ステートメントが実行された場合。接続の現在のデータベースがチェックポイントの対象です。

  • ALTER DATABASE を使用してデータベース オプションを変更する場合。ALTER DATABASE は、データベース オプションの変更時にデータベースのチェックポイントを指定します。

  • 次のいずれかにより SQL Server のインスタンスが停止する場合。
    • SHUTDOWN ステートメントの実行。

    • SQL Server Service Control Manager の使用による、データベース エンジンのインスタンスを実行しているサービスの停止。

    どちらの場合も、SQL Server のインスタンスの各データベースにチェックポイントが設定されます。

  • データベースの復元に要する時間を減らすために、インスタンスの SQL Server が各データベース内で定期的に自動チェックポイントを作成する場合。
自動チェックポイント

SQL Server 2000 は、常に自動チェックポイントを作成します。自動チェックポイントの間隔は、時間ではなく、ログ内のレコード数に基づきます。自動チェックポイントの時間的な間隔は、場合によって大きく変わります。データベースに加えられる変更がわずかな場合、自動チェックポイントの間隔は長くなります。これに対して、データの変更が多く行われる場合は、自動チェックポイントは頻繁に発生します。

自動チェックポイントの間隔は、[復旧間隔] サーバー設定オプションから計算されます。このオプションは、システムの再起動時に SQL Server がデータベースを復旧するために使用する最大時間を指定します。SQL Server は、復旧操作に際して、[復旧間隔] で処理できるログ レコード数を指定します。自動チェックポイントの間隔は、データベースで単純な復旧モデルを使用しているかどうかによっても異なります。

  • データベースで完全な復旧モデルまたは一括ログ記録復旧モデルを使用している場合、[復旧間隔] で指定される時間内に処理できると推定されたログ レコード数に達するたびに、自動チェックポイントが作成されます。

  • データベースで単純な復旧モデルを使用している場合、ログ レコード数が次の 2 つの値のうち、小さい方の値に達するたびに自動チェックポイントが作成されます。
    • ログが全体の 70 %に達したとき。

    • [復旧間隔] で指定される時間内に処理できると推定されたログ レコード数に達したとき。

データベースで単純な復旧モデルを使用している場合は、自動チェックポイントによってトランザクション ログの未使用の部分が切り捨てられます。データベースで完全な復旧モデルまたは一括ログ記録復旧モデルを使用している場合は、ログが自動チェックポイントによって切り捨てられることはありません。詳細については、「トランザクション ログの切り捨て」を参照してください。

長時間実行しているトランザクション

ログのアクティブな部分には、コミットされていないすべてのトランザクションのあらゆる部分が含まれている必要があります。アプリケーションがトランザクションを起動したきり、これをコミットしたりロールバックしないと、SQL Server は MinLSN を進めることができません。これによって、次の 2 つの問題が発生します。

  • トランザクションが多くの変更を加えたにもかかわらず、これをコミットせずにシステムをシャットダウンした場合、システムを再起動したときに、その復旧フェーズが、[復旧間隔] で指定される時間よりも長くかかる可能性があります。

  • ログは MinLSN を過ぎた状態で切り捨てることができないので、非常に大きくなることがあります。これは、トランザクション ログが通常自動チェックポイントのたびに切り捨てられる単純な復旧モデルをデータベースで使用している場合でも起こります。
レプリケーションのトランザクション

ログのアクティブな部分には、レプリケーションのためにマークされているものの、まだサブスクライバにレプリケートされていないすべてのトランザクションも含まれます。これらのトランザクションが時間どおりにレプリケートされない場合、それらによってログの切り捨てができなくなる場合もあります。

関連項目

バックアップ/復元アーキテクチャ

バッファ ページの解放と書き込み

トランザクションの復元

© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker