BATCHSQL
有効な対象
Replicat
摘要
BATCHSQLパラメータでは、Replicatのパフォーマンスを向上させます。BATCHSQLを使用すると、Replicatは同様のSQL文を配列にまとめてより高速に適用します。標準モードでは、Replicatは1回に1つのSQL文を適用します。
BATCHSQLは次のデータベースに有効です。
-
Db2 for i (V5R4またはi 6.1を除く)
-
Db2 LUW
-
z/
OS上のDb2 -
Oracle
-
PostgreSQL
-
SQLサーバー
-
Sybase
-
Teradata
-
期間
BATCHSQLを使用する場合
BATCHSQLを使用する前に、パラレルReplicatを使用して、Replicatのラグが緩和されるかどうかを確認します。そうでない場合は、BATCHSQLを有効にしてみてください。BATCHSQLを有効にするとパフォーマンスが向上する場合は、他の方法で有効にしたままにし、無効にして、すべての表に主キーまたは一意キーがあること、大規模なバッチ操作を制限すること、およびパラレルReplicatが最適なパフォーマンスのために十分なメモリーとIOを持つこと(ReplicatがIOバインドまたはメモリー・バインドされていないことを意味します)など、Replicatの他の代替チューニング演習を検討してください。
ReplicatがBATCHSQLモードの場合、小さな行の変更は大きな行の変更よりも高いパフォーマンスの向上を示します。行変更当たりのデータ量が100バイトの場合、BATCHSQLを使用することによってReplicatのパフォーマンスが最大で300%向上することがわかっていますが、実際のパフォーマンス向上は、混在する操作に応じて異なります。行変更当たりのデータ量が約5,000バイトの場合、BATCHSQLを使用するメリットは低下します。
使用制限
例外として処理されるSQL文には、次のものが含まれます。
-
LOBまたはLONGデータを含む文。 -
25Kよりも長い行を含む文。
-
ターゲット表に、主キー以外に1つ以上の一意キーが含まれている文。
BATCHSQLでは、主キー以外のキーの値が変更されたときにそれらのキーの正しい順序付けが保証されないため、バッチではこのような文を処理できません。 -
(SQL Server)ターゲット表にトリガーが含まれている文。
-
エラーを発生させる文。
Replicatはバッチ・モードで例外が発生すると、バッチ操作をロールバックし、次の方法で例外の適用を試行し、常にトランザクションの整合性を維持します。
-
まず、Replicatは標準モードの使用を試み、
GROUPTRANSOPSパラメータで設定されているトランザクション境界内で1回に1つのSQL文を適用します。詳細は、GROUPTRANSOPSを参照してください。 -
標準モードで失敗すると、Replicatはソース・モードの使用を試み、ソースと同じトランザクション境界内でSQLを適用します。
例外処理が終了すると、ReplicatはBATCHSQLモードを再開します。
表9 Replicatモード
| ソース・トランザクション(同じ表および列リストであると仮定) | 標準モードでのReplicatトランザクション | BATCHSQLモードでのReplicatトランザクション |
ソース・モードでのReplicatトランザクション |
|---|---|---|---|
トランザクション 1: `挿入` `削除` Transaction2: `挿入` `削除` トランザクション 3: `挿入` `削除` |
`挿入` `削除` `挿入` `削除` `挿入` `削除` |
`挿入` (x3) `削除` (x3) |
トランザクション 1: `挿入` `削除` トランザクション 2: `挿入` `削除` トランザクション 3: `挿入` `削除` |
BATCHSQLの動作
BATCHSQLモードでは、Replicatは同様のSQL文をメモリー・キュー内でバッチにまとめ、1回のデータベース操作で各バッチを適用します。1つのバッチに含まれるSQL文は、同一の表、操作タイプ(挿入、更新または削除)および列リストを処理します。たとえば、次の各グループは1つのバッチです。
-
表Aへの挿入
-
表Bへの挿入
-
表Aへの更新
-
表Bへの更新
-
表Aからの削除
-
表Bからの削除 ノート: Oracle GoldenGateは、バッチの実行の前に、バッチの外部キー参照依存関係を分析します。異なるバッチ内の文の間に依存関係がある場合、各バッチの複数のSQL文で参照整合性の維持が必要になることがあります。
キャッシュされる文の数の制御
MAXSQLSTATEMENTSパラメータは、キャッシュされる文の数を制御します。詳細は、MAXSQLSTATEMENTSを参照してください。古い文は、最低使用頻度アルゴリズムを使用して再利用されます。バッチは、指定されているしきい値に基づいて実行されます(参照)。
デフォルト
無効(標準Replicatモードで処理)
構文
BATCHSQL
[CHECKUNIQUEKEYS | NOCHECKUNIQUEKEYS]
[THREADS (<threadID>[, <threadID>][, ...][, <thread_range> [,<thread_range>][, ...])]
[CHECKUNIQUEKEYS |
NOCHECKUNIQUEKEYS] |
Replicatに有効です。
CHECKUNIQUEKEYSは、BATCHSQL処理をバイパスする一意キーを持つ表が見つかった場合に、強制的にフラッシュします。これにより、一意キーが変更された場合、操作の元の順序が維持されます。
デフォルト値はNOCHECKUNIQUEKEYSで、BATCHSQL処理を続行できる一意キーを持つ表が検出された場合、フラッシュは強制されません。
THREADS (<threadID>[, <threadID>][, ...][, <thread_range>[, <thread_range>][, ...])
BATCHESPERQUEUE、BATCHTRANSOPSおよびBYTESPERQUEUEに有効です。これらのオプションを、調整Replicatの指定した1つ以上のスレッドに適用します。
<threadID>[, <threadID>][, ...]
threadID, threadID, threadIDというフォーマットでスレッドIDまたはスレッドのカンマ区切りリストを指定します。
[, <thread_range>[, <thread_range>][, ...]
スレッドの範囲をthreadIDlow-threadIDhighの形式で指定するか、範囲のカンマ区切りリストをthreadIDlow-threadIDhigh, threadIDlow-threadIDhighの形式で指定します。
threadID, threadID, threadIDlow-threadIDhighのように、これらの形式を組み合せて指定することもできます。