1.17 BATCHSQL
適用対象
Replicat
説明
BATCHSQL
パラメータでは、Replicatのパフォーマンスを向上させます。BATCHSQL
を使用すると、Replicatは同様のSQL文を配列にまとめてより高速に適用します。標準モードでは、Replicatは1回に1つのSQL文を適用します。
BATCHSQL
は次のデータベースに有効です。
-
DB2 for i (V5R4またはi6.1を除く)
-
DB2 LUW
-
z/OS上のDB2
-
Oracle
-
PostgreSQL
-
SQL Server
-
Teradata
- Times Ten
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
モードを再開します。
表1-8 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
処理を無効にし、まず標準モードでトランザクションを再試行し、標準モードで失敗すると、ソース・モード(ソースと同じトランザクション境界)で実行します。
-
-
BATCHESPERQUEUE
n
-
1つのメモリー・キューに維持できる最大バッチ数を制御します。
BATCHESPERQUEUE
の値に到達すると、ターゲット・トランザクションが実行されます。-
最小値は1です。
-
最大値は1000です。
-
デフォルトは50です。
-
-
BATCHTRANSOPS
n
-
コミットが必要になる前に1つのトランザクションにグループ化可能な最大バッチ操作数を制御します。
BATCHTRANSOPS
の値に到達すると、操作がターゲットに適用されます。-
最小値は1です。
-
最大値は100000です。
-
デフォルトは、非統合Replicat (すべてのデータベース・タイプ)の場合は1000で、統合Oracle Replicatの場合は50です。
-
-
BYTESPERQUEUE
n
-
1つのキューに維持できる最大バイト数を設定します。
BYTESPERQUEUE
の値に到達すると、ターゲット・トランザクションが実行されます。-
最小値は1000000バイト(1MB)です。
-
最大値は1000000000バイト(1GB)です。
-
デフォルトは2000000バイト(20MB)です。
-
-
OPSPERBATCH
n
-
1つのバッチに含められる最大行操作数を設定します。
OPSPERBATCH
の値に到達すると、ターゲット・トランザクションが実行されます。-
最小値は1です。
-
最大値は100000です。
-
デフォルトは1200です。
-
-
OPSPERQUEUE
n
-
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パラメータ