クリーンアップ ジョブ
ここでは、変更データ キャプチャのクリーンアップ ジョブの仕組みについて説明します。
クリーンアップ ジョブの構造
変更データ キャプチャでは、保有期間に基づくクリーンアップ戦略を使用して変更テーブルのサイズを管理します。クリーンアップ メカニズムは、最初のデータベース テーブルが有効になったときに作成された SQL Server エージェント Transact-SQL ジョブで構成されます。単一のクリーンアップ ジョブがすべてのデータベース変更テーブルのクリーンアップを処理し、定義されたすべてのキャプチャ インスタンスに同じ保有期間値を適用します。
クリーンアップ ジョブは、パラメータなしのストアド プロシージャ sp_MScdc_cleanup_job を実行することによって開始されます。このストアド プロシージャは、構成された保有期間値およびしきい値をクリーンアップ ジョブのために msdb.dbo.cdc_jobs から抽出することによって開始されます。保有期間値は、変更テーブルの新しい低水位マークの計算に使用します。cdc.lsn_time_mapping テーブルの tran_end_time の最大値から指定の分数を差し引き、datetime 値として表す新しい低水位マークを取得します。その後、CDC.lsn_time_mapping テーブルを使用して、対応する lsn 値にこの datetime 値を変換します。テーブル内の複数のエントリが同じコミット時刻を共有する場合は、最小の lsn を持つエントリに対応する lsn が新しい低水位マークとして選択されます。この lsn 値は sp_cdc_cleanup_change_tables に渡され、データベース変更テーブルから変更テーブル エントリが削除されます。
注意 |
---|
最新のトランザクションのコミット時刻を、新しい低水位マークの計算のベースとして使用する利点は、変更を特定の時刻の変更テーブルに残せることです。これは、キャプチャ プロセスが背後で実行されている場合でも同様です。実際の低水位マークの共有コミット時刻を持つ最小の lsn を選択することにより、現在の低水位マークと同じコミット時刻を持つすべてのエントリは、変更テーブル内に引き続き表示されます。 |
クリーンアップが実行されると、すべてのキャプチャ インスタンスの低水位マークが単一のトランザクションで最初に更新されます。その後、使用されなくなったエントリの変更テーブルおよび cdc.lsn_time_mapping テーブルからの削除が試みられます。単一のステートメントで削除できるエントリの数は、構成可能なしきい値によって制限されます。1 つのテーブルで削除が失敗しても、残りのテーブルで削除操作ができなくなるわけではありません。
クリーンアップ ジョブのカスタマイズ
クリーンアップ ジョブの場合、カスタマイズが可能なのは、破棄する変更テーブル エントリを決定する戦略です。配布されたクリーンアップ ジョブでサポートされる唯一の戦略は時間ベースのものです。この状況では、新しい低水位マークは最後に処理されたトランザクションのコミット時刻から許容保有期間を引いて計算します。基になるクリーンアップ プロシージャは、時間ではなく lsn に基づいているため、変更テーブルに保持する最小の lsn を決定する戦略はいくつもあります。厳密には時間ベースのものはそのうちの一部のみです。たとえばクライアントに関する知識は、変更テーブルへのアクセスを必要とするダウンストリーム プロセスを実行できない場合にフェールセーフを提供するために使用できます。また、既定の戦略ではすべてのデータベースの変更テーブルのクリーンアップに同じ lsn を使用しますが、基になるクリーンアップ プロシージャを呼び出してキャプチャ インスタンス レベルでクリーンアップすることもできます。