ログの切り捨てが遅れる要因

更新 : 2006 年 7 月 17 日

ログの切り捨てにより、ログ ファイル内の領域が解放されて、トランザクション ログで再利用できるようになります。ログのアクティブな部分は、圧縮によって切り捨てたり削除したりできないため、ログ レコードが長い間アクティブなままになると切り捨てが遅れる場合があります。

ms345414.note(ja-jp,SQL.90).gifメモ :
ログの切り捨ての動作方法の詳細については、「トランザクション ログの切り捨て」を参照してください。

ログ レコードはさまざまな条件でアクティブなままになる場合があります。この点についてこのトピックで説明します。ログの切り捨てができなくなっている原因を見つけるには、sys.databases カタログ ビューの log_reuse_wait 列と log_reuse_wait_desc 列を使用します。

ms345414.note(ja-jp,SQL.90).gifメモ :
非常に実行時間の長いトランザクションや、一時停止中のデータベース ミラーリング セッションなど、これらの要因のいくつかが原因で、トランザクション ログがいっぱいになることがあります。トランザクション ログがいっぱいになった場合の対処方法については、「満杯になったトランザクション ログのトラブルシューティング (エラー 9002)」を参照してください。

次の表で、sys.database カタログ ビューの log_reuse_wait 列と log_reuse_wait_desc 列の値について説明します。

log_reuse_wait value

log_reuse_wait_desc value

説明

0

NOTHING

現在、1 つ以上の再利用可能な仮想ログ ファイルが存在する。

1

CHECKPOINT

最後にログの切り捨てを行ってからチェックポイントが発生していないか、ログの先頭が仮想ログ ファイルを超えて移動していない (すべての復旧モデル)。

これは、ログの切り捨てが遅れる一般的な原因です。詳細については、「チェックポイントとログのアクティブな部分」を参照してください。

2

LOG_BACKUP

ログの先頭を順方向に移動するには、ログ バックアップが必要である (完全または一括ログ復旧モードのみ)。

ms345414.note(ja-jp,SQL.90).gifメモ :

ログ バックアップでは切り捨てが行われます。

ログ バックアップが完了すると、ログの先頭は順方向に移動し、一部のログ領域は再利用可能になる場合があります。

3

ACTIVE_BACKUP_OR_RESTORE

データ バックアップまたは復元が実行中である (すべての復旧モデル)。

データ バックアップはアクティブなトランザクションと同様の影響があり、バックアップの実行中には、切り捨てが行われません。詳細については、このトピックの「データのバックアップ操作と復元操作」を参照してください。

4

ACTIVE_TRANSACTION

トランザクションがアクティブである (すべての復旧モデル)。

  • ログ バックアップの開始時に、実行時間が長いトランザクションが存在する場合があります。この場合、領域を解放するには再度ログ バックアップが必要になります。詳細については、このトピックの「実行時間の長いアクティブなトランザクション」を参照してください。
  • トランザクションが遅延トランザクションである (SQL Server 2005 Enterprise Edition 以降のみ)。遅延トランザクションは、使用できないリソースがあるためにロールバックがブロックされている事実上アクティブなトランザクションです。遅延トランザクションの原因およびこれらの遅延状態の解決方法については、「遅延トランザクション」を参照してください。

5

DATABASE_MIRRORING

データベース ミラーリングが一時中断されるか、高パフォーマンス モードでは、ミラー データベースがプリンシパル データベースに大幅に遅れる (完全復旧モデルのみ)。

詳細については、このトピックの「データベース ミラーリングとトランザクション ログ」を参照してください。

6

REPLICATION

トランザクション レプリケーション中、パブリケーションに関連するトランザクションがディストリビューション データベースにまだ配信されていない (完全復旧モデルのみ)。

詳細については、このトピックの「トランザクション レプリケーションとトランザクション ログ」を参照してください。

7

DATABASE_SNAPSHOT_CREATION

データベース スナップショットが作成されている (すべての復旧モデル)。

これは、通常、短い時間ログの切り捨てが遅れる一般的な原因となります。

8

LOG_SCAN

ログ スキャンが行われている (すべての復旧モデル)。

これは、通常は短時間、ログの切り捨てが遅れる一般的な原因となります。

9

OTHER_TRANSIENT

この値は現在使用されていません。

データのバックアップ操作と復元操作

バックアップ操作や復元操作の間は、ログの切り捨ては行われません。SQL Server 2005 以降では、ログ バックアップはデータ バックアップ中に実行できます。ただし、データ バックアップ操作からすべてのトランザクション ログが使用できる必要があるため、そのようなログ バックアップ中にログの切り捨てを実行することはできません。データ バックアップによってログの切り捨てが妨げられる場合、バックアップをキャンセルすると、当面の問題には対処できます。ファイル バックアップを行う場合、WITH NO_LOG を使用すると、ログの切り捨てが妨げられるという問題を回避できます。

ログの切り捨ての詳細については、「トランザクション ログの切り捨て」を参照してください。

ms345414.note(ja-jp,SQL.90).gif重要 :
BACKUP LOG ステートメントの NO_LOG オプションと TRUNCATE_ONLY オプションは、将来のバージョンの SQL Server では削除されます。このオプションでは、バックアップ コピーを作成せずにログの非アクティブな部分が削除され、アクティブなログ以外のすべてのログを破棄することでログが切り捨てられます。これにより、ログ チェーンが壊れます。そのため、データベースの完全バックアップまたは差分バックアップを次に行うまで、データベースをメディア障害から防ぐことができなくなります。したがって、新しい開発作業ではこれらのオプションの使用を避け、現在このオプションを使用しているアプリケーションの修正を検討することを強くお勧めします。

実行時間の長いアクティブなトランザクション

アクティブなトランザクションでは、トランザクションの開始が格納されているログ レコード以降のログがアクティブなままになっている必要があります。たとえば、トランザクションの開始と終了をユーザーが制御する場合、トランザクションの実行時間が長くなる一般的な原因は、トランザクションを開始したユーザーが、トランザクションがユーザーからの応答を待っているにもかかわらず、席を外してしまうことです。このような場合、待機状態のトランザクション自体によって生成されるログ量はわずかですが、ログの切り捨てが停止されるため、ログが大きくなります。

ms345414.note(ja-jp,SQL.90).gifメモ :
実行時間の長いトランザクションを回避する方法については、「効率的なトランザクションのコーディング」を参照してください。

データベース ミラーリングとトランザクション ログ

データベース ミラーリングでは、プリンシパル サーバー インスタンスが、ミラー サーバー上のディスクにレコードが書き込まれたという通知をミラー サーバー インスタンスから受け取るまで、各ログ レコードがアクティブなままであることが必要です。ミラー サーバー インスタンスがプリンシパル サーバー インスタンスから遅れると、それに応じてアクティブなログ領域の量が増えます。その場合、データベース ミラーリングを停止し、ログのバックアップを行ってログを切り捨て、ログのバックアップをミラー データベースに適用し (WITH NORECOVERY を使用)、ミラーリングを再開する必要があります。

ms345414.note(ja-jp,SQL.90).gif重要 :
さらに、必要なログ バックアップの後に作成された追加のログ バックアップがある場合は、ミラーリングを開始する前に、それらすべてを手動で適用する必要もあります (毎回 WITH NORECOVERY を使用します)。最新のログ バックアップの適用が完了した後に、ミラーリングを開始できます。

詳細については、「データベース ミラーリングの削除」および「データベース ミラーリングの設定」を参照してください。

トランザクション レプリケーションとトランザクション ログ

マージ レプリケーションとスナップショット レプリケーションではトランザクション ログのサイズに影響はありませんが、トランザクション レプリケーションでは影響があります。データベースに 1 つ以上のトランザクション パブリケーションが含まれていると、パブリケーションに関係するすべてのトランザクションがディストリビューション データベースに配信されるまで、ログは切り捨てられません。トランザクション ログが大きくなりすぎ、ログ リーダー エージェントをスケジュールによって実行している場合は、実行間隔を短くすることを検討してください。または、連続モードで実行するように設定してください。連続モードで実行するように設定されている場合は (既定値)、実行中であることを確認してください。ログ リーダー エージェントの状態を確認する方法の詳細については、「パブリケーションに関連付けられているエージェントの情報を表示したりタスクを実行する方法 (レプリケーション モニタ)」を参照してください。

また、パブリケーション データベースまたはディストリビューション データベース上で "sync with backup" オプションを設定している場合は、すべてのトランザクションのバックアップが完了するまではトランザクション ログが切り捨てられません。トランザクション ログが大きくなりすぎ、かつ、このオプションを設定している場合は、トランザクション ログのバックアップ間隔を短くしてください。トランザクション レプリケーションに関連するデータベースのバックアップと復元の方法の詳細については、「スナップショット レプリケーションおよびトランザクション レプリケーションのバックアップと復元の方式」を参照してください。

レプリケーションを管理するには

レプリケーションを監視するには

参照

概念

チェックポイントとログのアクティブな部分
トランザクション ログの切り捨て
トランザクション ログの圧縮
満杯になったトランザクション ログのトラブルシューティング (エラー 9002)

その他の技術情報

トランザクション ログの管理

ヘルプおよび情報

SQL Server 2005 の参考資料の入手