次の方法で共有


キャプチャ ジョブ

キャプチャ ジョブは、パラメータなしのストアド プロシージャ sp_MScdc_capture_job を実行することによって開始されます。このストアド プロシージャは、msdb.dbo.cdc_jobs からキャプチャ ジョブの maxtrans、maxscans、continuous、および pollinginterval の構成値を抽出することによって開始されます。これらの構成値は、パラメータとしてストアド プロシージャ sp_cdc_scan に渡されます。これは sp_replcmds を呼び出してログ スキャンを実行する場合に使用されます。

キャプチャ ジョブのパラメータ

キャプチャ ジョブの動作を理解するには、sp_cdc_scan における構成可能パラメータの使用方法について理解する必要があります。

maxtrans パラメータ

maxtrans パラメータは、ログの単一のスキャン サイクルで処理できるトランザクションの最大数を指定します。スキャン時に、処理するトランザクションの数がこの制限値に達すると、現在のスキャンにはそれ以上のトランザクションは含まれません。スキャン サイクルの完了後は、処理されたトランザクションの数は常に maxtrans 以下になります。

maxscans パラメータ

maxscans パラメータは、制御を返す前 (continuous = 0)、または waitfor を実行する前 (continuous = 1) に、ログを空にするために実行されるスキャン サイクルの最大数を指定します。

continous パラメータ

continuous パラメータは sp_cdc_scan が、ログを空にするか、最大数のスキャン サイクル (ワン ショット モード) を実行した後で制御を開放するかどうかを決定します。また、明示的に停止されるまで、sp_cdc_scan の実行を継続するかどうかもこのパラメータが制御します (連続モード)。

ワン ショット モード

ワン ショット モードでは、キャプチャ ジョブは sp_cdc_scan が最大 maxtrans 回のスキャンを実行して、ログを空にして返すことを要求します。ログに存在するトランザクションで maxtrans を超えた分は後のスキャンで処理されます。

ワン ショット モードは、処理するトランザクションのボリュームがわかっている、制御されたテストで使用され、完了時にジョブが自動的に終了するという利点があります。ワン ショット モードは、実稼働環境用にはお勧めできません。これは、このモードではジョブ スケジュールに依存してスキャン サイクル実行の頻度が管理されるためです。

ワン ショット モードでの実行時には、キャプチャ ジョブの予想スループットの上限を計算できます。これは次の計算式を使用して、1 秒あたりのトランザクション数として表します。

(maxtrans * maxscans) / number of seconds between scans

ログをスキャンして変更テーブルにデータを設定するために必要な時間が 0 とあまり変わらない場合でも、ジョブの平均スループットは、単一スキャンでのトランザクションの最大許容数にスキャンの最大許容数を掛け、それをログ処理間隔の秒数で割った値を超えることはできません。

ワン ショット モードでログ スキャンを制御する場合は、ログ処理間の秒数をジョブ スケジュールによって決める必要があります。このような動作が必要な場合、ログ スキャンの再スケジュールの管理には、連続モードでのキャプチャ ジョブの実行がより適しています。

連続モードとポーリング間隔

連続モードでは、キャプチャ ジョブは sp_cdc_scan が継続的に実行されることを要求します。これにより、ストアド プロシージャは、maxtrans と maxscans だけではなく、ログ処理間 (ポーリング間隔) の秒数の値を指定することにより、独自の wait ループを管理できます。このモードを実行すると、キャプチャ ジョブはアクティブな状態を維持し、ログ スキャン間に WAITFOR を実行します。

注意注意

ポーリング間隔の値が 0 より大きい場合、定期的なワン ショット ジョブのスループットと同じ上限が連続モードのジョブ操作にも適用されます。つまり、(maxtrans * maxscans) をゼロ以外のポーリング間隔で割ると、キャプチャ ジョブで処理できる平均トランザクション数の上限が決まります。

キャプチャ ジョブのカスタマイズ

キャプチャ ジョブでは、追加のロジックを適用することにより、固定したポーリング間隔に依存せずに、新しいスキャンをすぐに開始するか、スリープ状態を経てから新しいスキャンを開始するかを決定できます。この決定は単に時刻に基づきます。たとえば、アクティビティのピーク時に非常に長いスリープを強制したり、その日の処理を完了し、夜間の運用に備えることが重要な 1 日の終わりにポーリング間隔を 0 にしたりします。また、キャプチャ プロセスの進捗状態を監視して、午前零時までにコミットされたすべてのトランザクションのスキャンが完了して変更テーブルに格納された時刻を判断することもできます。これにより、キャプチャ ジョブを終了して、毎日 1 回のスケジュールで再起動することが可能になります。sp_cdc_scan を呼び出すジョブ ステップを、ユーザーが作成した sp_cdc_scan のラッパーに置き換えることにより、高度にカスタマイズされた動作を簡単に実現できます。

関連項目

概念