Oracle® Fusion Middleware Oracle GoldenGateリファレンスfor Windows and UNIX 12c (12.2.0.1) E70112-04 |
|
前 |
次 |
適用対象
Replicat
説明
BATCHSQL
パラメータでは、Replicatのパフォーマンスを向上させます。BATCHSQL
を使用すると、Replicatは同様のSQL文を配列にまとめてより高速に適用します。標準モードでは、Replicatは1回に1つのSQL文を適用します。BatchSQLは、Sybase ASE 15.7 SP110以降でサポートされています。
BATCHSQL
は次のデータベースに有効です。
DB2 for i (V5R4またはi6.1を除く)
DB2 LUW
z/OS上のDB2
Oracle
NonStop SQL/MX
PostgreSQL
SQL Server
Teradata
TimesTen
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
モードを再開します。
表3-31 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サポート・アナリストの指示を受けるようにしてください。
例
BATCHSQL BATCHESPERQUEUE 100, OPSPERBATCH 2000