IBM InfoSphere Change Data Capture, バージョン 10.2.1>>-+-----------------------------------------------------------------+->< | .-1000----. .-1-------. .-100----. | '-COMMITFREQ--=--(--+-records-+--,--+-seconds-+--,--+-groups-+--)-'
ソース・サーバーから受信するミラーリング変更をサブスクリプション・データベースにコミットする頻度を指定します。
このキーワードには、3 つの必須値のトリプレットを設定します。
コミットメント制御を有効にしなければ、最初の 2 つの条件 (変更数と秒数) のどちらかが満たされた時点で COMMIT がただちに実行されます。
コミットメント制御を有効にすれば、3 つの条件のいずれかが満たされてから次の完全なコミット・グループを受信した時点で COMMIT が実行されます。ただし、コミットメント制御を有効にした場合にも例外があります。つまり、指定の秒数が経過した時点でソースから最後に受信したものが完全なコミット・グループだった場合です。その場合は、ただちに COMMIT が実行されます。
COMMIT が実行されると、変更カウンター、タイマー、コミット・グループ・カウンターがすべてリセットされます。
COMMITFREQ 設定は、サブスクリプションごとに別々に適用されます。1 つのサブスクリプションについて受信された変更またはコミット・グループは、他のサブスクリプションで COMMIT が実行されるときには適用されません。 同じように、それぞれのサブスクリプションには独自のコミット・タイマーがあり、他のサブスクリプションのコミット・タイマーと同期化されるとは限りません。
COMMITFREQ キーワードの設定値が高ければ高いほど、スループットの増加は大きくなります。ただし、スループットが増加する反面、変更を適用するときに取得する DBMS ロックの数、レベル、所要時間の値がいずれも大きくなるというコストや、デッドロック/タイムアウトによる再試行状況を処理するためのコストが伴います。
例えば、コミットメント制御が有効になっていない状態で、COMMITFREQ=(1000,60,1) を指定したとしましょう。その場合は、受信した変更の数が 1000 に達するか、60 秒が経過するか、そのどちらかの状況が先に発生した時点で COMMIT が実行されます。コミットメント制御が有効になっていないので、コミット・グループを受信することはありません。
別の例として、コミットメント制御が有効になっている状態で、COMMITFREQ=(10000,300,10) を指定したとしましょう。 その場合は、受信した変更の数が 10000 に達した後の次のコミット・グループの終了時点、300 秒が経過した後の次のコミット・グループの終了時点、受信した完全なコミット・グループの数が 10 に達した時点のいずれかで COMMIT が実行されます。さらに、300 秒が経過した時点で最後に受信したものが (部分的なコミット・グループではなく) 完全なコミット・グループであれば、その時点で COMMIT が実行されます。
このキーワードに関する考慮事項を以下にまとめます。
このキーワードはオプションです。
デフォルト設定 - (1000 (レコード)、1 (秒)、100 (コミット・グループ))