BATCHSQL
適用対象
Replicat
説明
BATCHSQLパラメータでは、Replicatのパフォーマンスを向上させます。BATCHSQLを使用すると、Replicatは同様のSQL文を配列にまとめてより高速に適用します。標準モードでは、Replicatは1回に1つのSQL文を適用します。
BATCHSQLは次のデータベースに有効です。
-
DB2 for i (V5R4またはi6.1を除く)
-
DB2 LUW
-
z/OS上のDB2
-
Oracle
-
SQL Server
-
Teradata
BATCHSQLの動作
BATCHSQLモードでは、Replicatは同様のSQL文をメモリー・キュー内でバッチにまとめ、1回のデータベース操作で各バッチを適用します。1つのバッチに含まれるSQL文は、同一の表、操作タイプ(挿入、更新または削除)および列リストを処理します。たとえば、次の各グループは1つのバッチです。
-
表Aへの挿入
-
表Bへの挿入
-
表Aへの更新
-
表Bへの更新
-
表Aからの削除
-
表Bからの削除
注意:
Oracle GoldenGateは、バッチの実行の前に、バッチの外部キー参照依存関係を分析します。異なるバッチ内の文の間に依存関係がある場合、各バッチの複数のSQL文で参照整合性の維持が必要になることがあります。
キャッシュされる文の数の制御
MAXSQLSTATEMENTSパラメータは、キャッシュされる文の数を制御します。詳細は、MAXSQLSTATEMENTSを参照してください。古い文は、最低使用頻度アルゴリズムを使用して再利用されます。バッチは、指定されているしきい値(メモリーの管理を参照してください)に基づいて実行されます。
使用制限
例外として処理されるSQL文には、次のものが含まれます。
-
LOBまたはLONGデータを含む文。 -
25Kよりも長い行を含む文。
-
ターゲット表に、主キー以外に1つ以上の一意キーが含まれている文。
BATCHSQLでは、主キー以外のキーの値が変更されたときにそれらのキーの正しい順序付けが保証されないため、バッチではこのような文を処理できません。 -
(SQL Server)ターゲット表にトリガーが含まれている文。
-
エラーを発生させる文。
Replicatは、バッチ・モードで例外が発生すると、バッチ操作をロールバックし、次の方法で例外の処理を試行し、常にトランザクションの整合性を維持します。
-
まず、Replicatは標準モードの使用を試み、
GROUPTRANSOPSパラメータで設定されているトランザクション境界内で1回に1つのSQL文を適用します。詳細は、GROUPTRANSOPSを参照してください。 -
標準モードで失敗すると、Replicatはソース・モードの使用を試み、ソースと同じトランザクション境界内でSQLを適用します。
例外処理が終了すると、ReplicatはBATCHSQLモードを再開します。
表6-12 Replicatモードの比較
| ソース・トランザクション(同じ表および列リストであると仮定) | 標準モードでのReplicatトランザクション | BATCHSQLモードでのReplicatトランザクション | ソース・モードでのReplicatトランザクション |
|---|---|---|---|
|
トランザクション1:
Transaction2:
トランザクション3:
|
|
|
トランザクション1:
トランザクション2:
トランザクション3:
|
BATCHSQLを使用する場合
ReplicatがBATCHSQLモードの場合、小さな行の変更は大きな行の変更よりも高いパフォーマンスの向上を示します。行変更当たりのデータ量が100バイトの場合、BATCHSQLを使用することによってReplicatのパフォーマンスが最大で300%向上することがわかっていますが、実際のパフォーマンス向上は、混在する操作に応じて異なります。行変更当たりのデータ量が約5,000バイトの場合、BATCHSQLを使用するメリットは低下します。
メモリーの管理
SQL文をバッチにまとめると、効率性は向上しますが、メモリーも消費します。最適なパフォーマンスを維持するために、次のBATCHSQLオプションを使用してください。
BATCHESPERQUEUE BYTESPERQUEUE OPSPERBATCH OPSPERQUEUE
値を設定するベンチマークとして、それぞれ500バイトの1,000のSQL文をまとめた1つのバッチが必要とするメモリーは10MB未満であると想定してください。
デフォルト
無効(標準Replicatモードで処理)
構文
BATCHSQL [BATCHERRORMODE | NOBATCHERRORMODE] [BATCHESPERQUEUE n] [BATCHTRANSOPS n] [BYTESPERQUEUE n] [OPSPERBATCH n] [OPSPERQUEUE n] [THREADS (threadID[,threadID][, ...][,thread_range[,thread_range][, ...])] [TRACE]
-
BATCHERRORMODE | NOBATCHERRORMODE -
BATCHSQL処理モード中に発生するエラーに対するReplicatのレスポンスを設定します。-
BATCHERRORMODE -
BATCHSQLモードのままReplicatにエラーの解決を試行させます。重複レコード・エラーが原因で失敗した挿入を更新に変換し、削除に対する行方不明レコード・エラーを無視します。BATCHERRORMODEを使用する場合は、HANDLECOLLISIONSパラメータを使用してReplicatの異常終了を防止します。 -
NOBATCHERRORMODE -
デフォルトでは、エラーが発生すると、Replicatは一時的に
BATCHSQL処理を無効にし、まず標準モードでトランザクションを再試行し、標準モードで失敗すると、ソース・モード(ソースと同じトランザクション境界)で実行します。
-
-
BATCHESPERQUEUEn -
1つのメモリー・キューに維持できる最大バッチ数を制御します。
BATCHESPERQUEUEの値に到達すると、ターゲット・トランザクションが実行されます。-
最小値は1です。
-
最大値は1000です。
-
デフォルトは50です。
-
-
BATCHTRANSOPSn -
コミットが必要になる前に1つのトランザクションにグループ化可能な最大バッチ操作数を制御します。
BATCHTRANSOPSの値に到達すると、操作がターゲットに適用されます。-
最小値は1です。
-
最大値は100000です。
-
デフォルトは、非統合Replicat (すべてのデータベース・タイプ)の場合は1000で、統合Oracle Replicatの場合は50です。
-
-
BYTESPERQUEUEn -
1つのキューに維持できる最大バイト数を設定します。
BYTESPERQUEUEの値に到達すると、ターゲット・トランザクションが実行されます。-
最小値は1000000バイト(1MB)です。
-
最大値は1000000000バイト(1GB)です。
-
デフォルトは2000000バイト(20MB)です。
-
-
OPSPERBATCHn -
1つのバッチに含められる最大行操作数を設定します。
OPSPERBATCHの値に到達すると、ターゲット・トランザクションが実行されます。-
最小値は1です。
-
最大値は100000です。
-
デフォルトは1200です。
-
-
OPSPERQUEUEn -
1つのキューに維持できるすべてのバッチの最大行操作数を設定します。
OPSPERQUEUEの値に到達すると、ターゲット・トランザクションが実行されます。-
最小値は1です。
-
最大値は100000です。
-
デフォルトは1200です。
-
-
THREADS (threadID[,threadID][, ...][,thread_range[,thread_range][, ...]) -
BATCHESPERQUEUE、BATCHTRANSOPSおよびBYTESPERQUEUEに有効です。これらのオプションを、調整Replicatの指定した1つ以上のスレッドに適用します。-
threadID[,threadID][, ...] -
スレッドIDを指定するか、スレッドのカンマ区切りリストを
threadID, threadID, threadIDの形式で指定します。 -
[,thread_range[,thread_range][, ...] -
スレッドの範囲を
threadIDlow-threadIDhighの形式で指定するか、範囲のカンマ区切りリストをthreadIDlow-threadIDhigh,threadIDlow-threadIDhighの形式で指定します。
threadID,threadID,threadIDlow-threadIDhighのように、これらの形式を組み合せて指定することもできます。 -
-
TRACE -
コンソールおよびレポート・ファイルへの
BATCHSQLアクティビティの詳細なトレースを有効化します。トレースを設定するときは、必ずOracleサポート・アナリストの指示を受けるようにしてください。 -
NUMTHREADS -
コンソールおよびレポート・ファイルへの
BATCHSQLアクティビティの詳細なトレースを有効化します。トレースを設定するときは、必ずOracleサポート・アナリストの指示を受けるようにしてください。-
最小値は0です。
-
最大値は50です。
-
-
MAXTHREADQUEUEDEPTH -
コンソールおよびレポート・ファイルへの
BATCHSQLアクティビティの詳細なトレースを有効化します。トレースを設定するときは、必ずOracleサポート・アナリストの指示を受けるようにしてください。-
最小値は0です。
-
最大値は50です。
-
デフォルトは10です。
-
-
CHECKUNIQUEKEYS -
コンソールおよびレポート・ファイルへの
BATCHSQLアクティビティの詳細なトレースを有効化します。トレースを設定するときは、必ずOracleサポート・アナリストの指示を受けるようにしてください。 -
ERRORHANDLING -
コンソールおよびレポート・ファイルへの
BATCHSQLアクティビティの詳細なトレースを有効化します。トレースを設定するときは、必ずOracleサポート・アナリストの指示を受けるようにしてください。 -
BYPASSCHECK -
コンソールおよびレポート・ファイルへの
BATCHSQLアクティビティの詳細なトレースを有効化します。トレースを設定するときは、必ずOracleサポート・アナリストの指示を受けるようにしてください。
例
BATCHSQL BATCHESPERQUEUE 100, OPSPERBATCH 2000
親トピック: Oracle GoldenGateパラメータ