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を参照してください。