プライマリ・コンテンツに移動
Oracle® GoldenGate Oracle GoldenGateリファレンスfor Windows and UNIX
12c (12.1.2)
E49845-08
  目次へ移動
目次

前
 
次
 

BATCHSQL

適用対象

Replicat

説明

BATCHSQLパラメータでは、Replicatのパフォーマンスを向上させます。BATCHSQLを使用すると、Replicatは同様のSQL文を配列にまとめてより高速に適用します。標準モードでは、Replicatは1回に1つのSQL文を適用します。

BATCHSQLは次のデータベースに有効です。

  • DB2 for i (V5R4またはi6.1を除く)

  • DB2 LUW

  • z/OS上のDB2

  • Oracle

  • NonStop SQL/MX

  • PostgreSQL

  • 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モードを再開します。

表3-31 Replicatモードの比較

ソース・トランザクション(同じ表および列リストであると仮定) 標準モードでのReplicatトランザクション BATCHSQLモードでのReplicatトランザクション ソース・モードでのReplicatトランザクション

トランザクション1:

INSERT

DELETE

トランザクション2:

INSERT

DELETE

トランザクション3:

INSERT

DELETE

INSERT

DELETE

INSERT

DELETE

INSERT

DELETE

INSERT (x3)

DELETE (x3)

トランザクション1:

INSERT

DELETE

トランザクション2:

INSERT

DELETE

トランザクション3:

INSERT

DELETE


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][, ...])

BATCHESPERQUEUEBATCHTRANSOPSおよび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