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

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

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

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

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

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

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

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

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

ターゲット表に主キー、一意キーまたは一意索引がない場合、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を参照してください。