トランザクション ログの切り捨て

トランザクション ログからログ レコードが削除されないと、物理ログ ファイルで利用可能なディスク上の領域がいっぱいになってしまいます。ログの切り捨てにより論理ログのディスク領域が自動的に解放され、トランザクション ログで再利用できるようになります。

何かの理由で遅延が発生している場合を除いて、次の場合、ログの切り捨ては自動的に発生します。

  • チェックポイント以降の単純復旧モデル。

  • 前回のバックアップ後にチェックポイントが発生した場合の、ログ バックアップ後の完全復旧モデルまたは一括ログ復旧モデル。詳細については、後の「完全復旧モデルと一括復旧モデルでのログの切り捨て」を参照してください。

ログの切り捨ては自動的に行われますが、さまざまな要因で遅延が発生する場合があります。ログの切り捨ての遅延要因の詳細については、「ログの切り捨てが遅れる原因となる要因」を参照してください。

重要な注意事項重要

ログの切り捨てで長時間の遅延が発生すると、トランザクション ログがいっぱいになる可能性があります。トランザクション ログがいっぱいになった場合の処理方法の詳細については、「満杯になったトランザクション ログのトラブルシューティング (エラー 9002)」を参照してください。

ログの切り捨てに関する高度な内容については、後の「ログを切り捨てるしくみ」を参照してください。

完全復旧モデルと一括ログ復旧モデルでのログの切り捨て

完全復旧モデルまたは一括ログ復旧モデルでは、ログの非アクティブな部分は、そのすべてのログ レコードがログ バックアップでキャプチャされるまで切り捨てることができません。この処理は、"ログ チェーン" を保持するために必要です。ログ チェーンとは、連続したログ シーケンス番号 (LSN) が指定された一連のログ レコードです。以下の条件を満たしていれば、ログはトランザクション ログのバックアップ時に切り捨てられます。

  • ログを最後にバックアップしてからチェックポイントが発生したこと。完全復旧モデルまたは一括ログ復旧モデルでは、チェックポイントは必要不可欠ですが、ログの切り捨てには十分ではありません。チェックポイントの後、少なくとも次のトランザクション ログのバックアップまでログはそのまま保たれます。

    詳細については、「チェックポイントとログのアクティブな部分」を参照してください。

  • ログ トランザクションを妨げる要因が他にないこと。

    一般的には、定期的なバックアップにより、ログ領域は将来の使用のために定期的に解放されます。ただし、実行時間の長いトランザクションなど、さまざまな要因で、ログの切り捨てが一時的に妨げられることがあります。詳細については、「ログの切り捨てが遅れる原因となる要因」を参照してください。

  • BACKUP LOG ステートメントで WITH COPY_ONLY を指定していないこと。

トランザクション ログをバックアップするには

ログを切り捨てるしくみ

注意

ログの切り捨てを行っても、物理ログ ファイルのサイズは縮小されません。ログ ファイルの物理サイズを縮小するには、ファイルを圧縮する必要があります。物理ログ ファイルのサイズの圧縮の詳細については、「トランザクション ログの圧縮」を参照してください。

トランザクション ログは、循環して使用されるファイルです。このデータベースの作成時、論理ログ ファイルは物理ログ ファイルの先頭から始まります。新しいログ レコードは論理ログの末尾に追加され、物理ログの末尾に向かって拡張されます。データベースのトランザクション ログは、1 つ以上の物理ファイルにマップされます。SQL Server データベース エンジンにより、各物理ログ ファイルは内部的に多くの仮想ログ ファイルに分割されています。ログの切り捨てにより、論理ログの先頭から非アクティブな仮想ログ ファイルを削除して、論理ログの領域を解放します。トランザクション ログ アーキテクチャの詳細については、「トランザクション ログの論理アーキテクチャ」および「トランザクション ログの物理アーキテクチャ」を参照してください。

仮想ログ ファイルは再利用できる領域の単位です。非アクティブなログ レコードだけを含む仮想ログ ファイルのみを切り捨てることができます。トランザクション ログのアクティブな部分は、アクティブ ログといい、切り捨てることができません。これは、アクティブ ログがデータベースの復旧に必要だからです。アクティブ ログは、最新のチェックポイントで定義されます。このログは、そのチェックポイントの直前まで切り捨てることができます。

注意

仮想ログ ファイルの機能については、「トランザクション ログの物理アーキテクチャ」を参照してください。

チェックポイントが実行されると、トランザクション ログの非アクティブな部分は再利用できるようにマークが付けられます。その後、ログの切り捨てにより、非アクティブな部分を解放できます。切り捨てにより、非アクティブな仮想ログ ファイルは解放され、再利用できるようになります。最終的に、解放された仮想ログに新しいレコードが書き込まれると、その仮想ログ ファイルは再びアクティブになります。

チェックポイントで記録される情報は、データベース全体を正常にロールバックするために必要な最初のログ レコードのログ シーケンス番号 (LSN) です。この LSN は、最小復旧 LSN (MinLSN) といいます。ログのアクティブな部分の先頭は、MinLSN を含む仮想ログです。トランザクション ログが切り捨てられると、この仮想ログ ファイルより前にあるログ レコードのみが再利用のために解放されます。

次の図は、切り捨てを行う前と後のトランザクション ログを示しています。最初の図は、切り捨てが行われていないトランザクション ログを示しています。現在、4 つの仮想ログ ファイルが論理ログで使用されています。この論理ログは最初の仮想ログ ファイルの先頭から始まり、仮想ログ 4 で終了します。MinLSN レコードは仮想ログ 3 にあります。仮想ログ 1 および仮想ログ 2 には、非アクティブなログ レコードのみが含まれています。これらのレコードは切り捨てることができます。仮想ログ 5 はまだ使用されていないので、現在の論理ログには含まれていません。

4 つの仮想ログがあるトランザクション ログ

2 番目の図は、切り捨て後のログの状態を示しています。仮想ログ 1 および仮想ログ 2 は再利用のために解放されています。この時点で、論理ログは仮想ログ 3 の先頭から始まっています。仮想ログ 5 はまだ使用されていないので、現在の論理ログには含まれていません。

4 つの仮想ログ ファイルに分割されたログ ファイル