Replicatトランザクションのチューニング

Replicatは標準SQLを使用するため、そのパフォーマンスは、ターゲット・データベースのパフォーマンスおよび適用されるSQLのタイプ(挿入、または更新や削除)に依存します。ただし、特定のステップを実行して、Replicatの効率を最大限にすることができます。

バリア・トランザクションに対する調整パフォーマンスのチューニング

調整Replicat構成で、主キーへの更新などのバリア・トランザクションにより、データベースへのコミット数が増加し、ReplicatのGROUPTRANSOPS機能のメリットが妨げられます。調整Replicatのワークロード全体でバリア・トランザクションの数が多い場合、多数のスレッドを使用すると、実際にReplicatのパフォーマンスが低下します。

多数のバリア・トランザクションが予想される場合に高いパフォーマンスを維持するために、次を実行できます。

  • グループ内のアクティブなスレッド数を減らします。これにより、Replicatが実行する全体のコミット数が削減されます。

  • バリア・トランザクションの大部分を占める表、およびそれと依存関係がある任意の表を、スレッド数が少ない別の調整Replicatグループに移動します。バリア・トランザクションに妨げられずに並列パフォーマンスを維持するように、より多数のスレッドを持つ元のReplicatグループに最小限のバリア・トランザクションがある表を保持します。

  • (Oracle RAC)新しいReplicat構成で、Replicatチェックポイント表のPCTFREE属性を増やすことができます。ただし、最初にReplicatを起動する前にこれを実行する必要があります。PCTFREEの推奨値は90です。

配列での同様のSQL文の適用

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

ReplicatがBATCHSQLモードの場合、小さな行の変更は大きな行の変更よりも高いパフォーマンスの向上を示します。行変更当たりのデータ量が100バイトの場合、BATCHSQLを使用することによってReplicatのパフォーマンスが最大で300%向上することがわかっていますが、実際のパフォーマンス向上は、混在する操作に応じて異なります。行変更当たりのデータ量が約5,000バイトの場合、BATCHSQLを使用するメリットは低下します。

SQL文をバッチにまとめると、効率性は向上しますが、メモリーも消費します。最適なパフォーマンスを維持するために、次のBATCHSQLオプションを使用してください。

BATCHESPERQUEUE 
BYTESPERQUEUE 
OPSPERBATCH 
OPSPERQUEUE 

値を設定するベンチマークとして、それぞれ500バイトの1,000のSQL文をまとめた1つのバッチが必要とするメモリーは10MB未満であると想定してください。

BATCHSQLBATCHTRANSOPSオプションとともに使用して、配列のサイズを調整できます。BATCHTRANSOPSは、コミットが必要になる前に1つのトランザクションにグループ化可能な最大バッチ操作数を制御します。非統合Replicatのデフォルトは1000です。統合Replicatのデフォルトは50です。統合Replicatを使用する際に多くの待機依存性がある場合、BATCHTRANSOPSの値を減らしてみてください。待機依存性の数を確認するには、OracleデータベースのV$GG_APPLY_COORDINATORデータベース・ビューのTOTAL_WAIT_DEPS列を表示します。

その他の使用方法の考慮事項および構文は、Oracle GoldenGateパラメータおよび機能リファレンスを参照してください。

キーがない場合の完全な表スキャンの防止

ターゲット表に主キー、一意キーまたは一意索引がない場合、Replicatはすべての列を使用してWHERE句を構築します。これは本質的に完全な表スキャンです。

行選択をより効率的に行うには、TABLE文およびMAP文のKEYCOLS句を使用して、1つ以上の列を一意と識別します。Replicatは指定された列をキーとして使用します。次の例は、TABLE文のKEYCOLS句を示しています。

TABLE hr.emp, KEYCOLS (FIRST_NAME, LAST_NAME, DOB, ID_NO);

使用方法のガイドラインおよび構文は、Oracle GoldenGateパラメータおよび機能リファレンスTABLEパラメータおよびMAPパラメータを参照してください。

大規模トランザクションの分割

ソース・データベースの大規模なトランザクションをターゲット・データベースで処理できない場合、ReplicatパラメータMAXTRANSOPSを使用して、一連の小さいトランザクションに分割できます。詳細は、Oracle GoldenGateパラメータおよび機能リファレンスを参照してください。

ノート:

MAXTRANSOPSは、Oracleデータベース・システムの統合Replicatには無効です。

オープン・カーソルの調整

Replicatプロセスは、キャッシュされたSQL文およびSQLEXEC操作のためにカーソルを保持します。十分なカーソルがないと、Replicatはより多くの文をエージングする必要があります。デフォルトでは、ReplicatはMAXSQLSTATEMENTSパラメータで許可されているのと同じ数のカーソルを保持します。このパラメータの値を増やす必要がある場合があります。その場合、データベースで許可されているオープン・カーソルの最大数も調整する必要があります。詳細は、Oracle GoldenGateパラメータおよび機能リファレンスを参照してください。

更新速度の向上

ブロックの断片化を過度に行うと、ReplicatがSQL文を適用する速度が通常より遅くなります。過度に断片化された表を再編成し、Replicatを停止および起動して、新しいオブジェクトIDを登録します。

Replicatトランザクション・タイムアウトの設定

TRANSACTIONTIMEOUTパラメータでは、コミットされていないReplicatターゲット・トランザクションによる、ターゲット・データベースのロックおよびリソースの無駄な消費を防止します。Replicatが既存のアプリケーション・タイムアウト、およびターゲットのその他のデータベース要件内で動作できるように、このパラメータの値を変更できます。

TRANSACTIONTIMEOUTでは、Replicatがターゲット・トランザクション内の最後のソース・トランザクションのトランザクション終了レコードを受信していない場合に、ターゲット・トランザクションをオープンしておくことができる時間を制限します。デフォルトでは、Replicatは複数のソース・トランザクションを1つのターゲット・トランザクションにグループ化してパフォーマンスを向上させますが、ソース・トランザクションの一部のみのコミットは行わず、最後のレコードが到着するまで無制限に待ちます。ReplicatパラメータのGROUPTRANSOPSでは、グループ化されるターゲット・トランザクションの最小サイズを制御します。

次のイベントは、長期化してTRANSACTIONTIMEOUTをトリガーする場合があります。

  • ネットワークの問題によって、トレイル・データがターゲット・システムに転送されない。

  • いずれかのシステムのディスク容量が不足し、トレイル・データが書き込まれない。

  • トランザクションのレコードの書込み中のExtractの異常終了または停止。

  • 停電やシステムのクラッシュなど、ソース・システムの障害。

詳細は、Oracle GoldenGateパラメータおよび機能リファレンスTRANSACTIONTIMEOUTを参照してください。