18 Oracle GoldenGateのパフォーマンスのチューニング

この章では、Oracle GoldenGateコンポーネントのパフォーマンスを向上するための推奨事項について説明します。

内容は次のとおりです。

複数のプロセス・グループの使用

データベースから効率的に取得するために必要なExtractグループは、通常1つのみです。ただし、REDO (トランザクション)の値、またはデータと操作のタイプによっては、1つ以上のExtractグループを構成に追加する必要がある場合があります。

同様に、Replicatを調整モードで使用する場合、ターゲット・データベースにデータを適用するために必要なReplicatグループは、通常1つのみです。(詳細は、「調整Replicatモードについて」を参照してください。)ただし、Replicatを調整モードで使用する場合でも、複数のReplicatグループが必要な場合があります。Replicatをクラシック・モードで使用し、アプリケーションで大量のトランザクションが生成される場合、パラレルReplicatグループを使用する必要がある場合があります。

Oracle GoldenGateコンポーネント(Extract、データ・ポンプ、証跡、Replicat)は独立したモジュールのため、必要に応じた組合せが可能です。複数の証跡とパラレルのExtractおよびReplicatプロセスを使用すると(データ・ポンプは使用しても使用しなくてもよい)、大量のトランザクションの処理、パフォーマンスの向上、ボトルネックの解消、レイテンシの削減または特定のデータの処理の分離を行えます。

図18-1に、処理速度を高め、ネットワーク帯域幅の問題を解決するようOracle GoldenGateを構成する方法をいくつか示します。

図18-1 パフォーマンスを向上させるロードバランシング構成

パフォーマンスを向上させるロードバランシング構成は、処理速度を高め、ネットワーク帯域幅の問題を解決するようOracle GoldenGateを構成する方法をいくつか示しています。
図のラベルの意味は次のとおりです。
  • A: パラレルExtractによってロードが分割されます。たとえば、スキーマごとに、あるいはフェッチを生成する表を分離する場合などです。

  • B: ローカル証跡があるデータ・ポンプを、フィルタリング、変換およびネットワーク・フォルト・トレランスに使用できます。

  • C: TCP/IPスループットを有効にするために、複数のデータ・ポンプがネットワークのプロセス当たりのバンド幅制限を回避します。それらの間で、TABLEパラメータ文を分割します。

  • D: パラレルReplicatによってデータベースへのスループットが増加します。どの証跡も1つ以上のReplicatで読み取ることができます。それらの間で、MAP文を分割します。

複数のプロセス・グループの使用に関する考慮事項

複数の処理グループを構成する前に、次の考慮事項に目を通し、望んだ結果が得られ、データ整合性が保てる構成であることを確認します。

データ整合性の維持

すべてのワークロードが、複数のグループにパーティション化されても元のトランザクション原子性を維持できるというわけではありません。1つのグループのオブジェクトが他のいずれかのグループのオブジェクトに対して、トランザクションまたはそれ以外の依存関係を持つことがあるかどうかを判断する必要があります。たとえば、ワークロードが主キーを定期的に更新する表は、この方法で簡単にパーティション化することはできません。このモードでは、DDLレプリケーション(データベースに対してサポートされている場合)も、アクションが特定のレコードに基づいているような一部のSQLEXECまたはEVENTACTIONS機能の使用も、有効ではありません。

表に外部キー依存性や主キーの更新がない場合、複数プロセスを使用できます。関連するDMLを同じプロセス・ストリームに保持し、データ整合性を保ちます。

グループの数

システムで実行できる同時ExtractおよびReplicatプロセス・グループの数は、使用可能なシステム・メモリー・サイズに応じて異なります。Classic ExtractおよびReplicatの各プロセスには、約25から55MBのメモリーが必要であり、トランザクションのサイズと同時トランザクション数によってはそれ以上のメモリーが必要です。Oracle GoldenGate GGSCIコマンド・インタフェースでは、Oracle GoldenGate Managerのインスタンス当たり、最大で同時に5,000のExtractおよびReplicatグループ(合計)がサポートされます。サポートされているレベルで、INFOSTATUSなどのGGSCIコマンドですべてのグループを完全に制御および表示できます。サポートされているレベルを超えると、グループ情報は表示されず、エラーが発生する可能性があります。Oracle GoldenGateでは、環境を効果的に管理するために、ExtractおよびReplicatグループの数(合計)を100以下程度の扱いやすいレベルを保つようにお薦めします。グループの最大数は、MAXGROUPSパラメータで制御されます。デフォルトは1000です。

Windows Server環境では、実行可能なプロセス・グループの数は、'非対話型' Windowsデスクトップ・ヒープ・メモリーの設定と密接に関係します。Windowsデスクトップ・ヒープのデフォルト設定は、非常に少数のプロセス・グループの実行には十分といえますが、プロセス・グループが大量(おおよそ60以上)になったときには、このMicrosoftからの情報(Windowsデスクトップ・ヒープ・メモリー)に基づいてレジストリのSharedSectionフィールドの'非対話型'の値を調整するか、Oracle GoldenGateホームの数を増やして、それらのホーム全体で必要なプロセス・グループの合計数を分散する必要があります。

注意:

Windowsデスクトップ・ヒープ・メモリーの変更の詳細は、Oracle Knowledge Baseドキュメント(Doc ID 2056225.1)を確認してください。
メモリー

システムは、今後実行する各Oracle GoldenGate ExtractおよびReplicatプロセスのために、十分なスワップ領域を確保している必要があります。必要なスワップ領域を特定するには、次の手順を実行します。

  1. 1つのExtractまたはReplicatを起動します。
  2. GGSCIを実行します。
  3. レポート・ファイルを表示し、PROCESS VM AVAIL FROM OS (min)行を探します。
  4. 必要に応じて、値を次の整数(GB)に切り上げます。たとえば、1.76GBの場合は2GBに切り上げます。
  5. その値に、実行されるExtractおよびReplicatプロセスの数を掛けます。その結果が、必要となる可能性のあるスワップ領域の最大量です。

メモリーの管理方法の詳細は、『Oracle GoldenGateリファレンス』CACHEMGRパラメータに関する項を参照してください。

処理が集中している表の分離

複数のプロセス・グループを使用して、通常の処理を妨げ、ターゲットでレイテンシを発生させるような表をサポートできます。次に例を示します。

  • 列のデータ型またはパラメータの指定によって、あるいはSQLプロシージャを実行するために、Extractでデータベースからフェッチを行う必要がある場合があります。データベースからデータをフェッチする必要がある場合、Extractのパフォーマンスに影響します。Extractのパラメータ・ファイルにSTATOPTIONS REPORTFETCHパラメータが含まれている場合、STATS EXTRACTコマンドでフェッチ統計を取得できます。トランザクションの整合性が保てるのであれば、それらの表を独自のExtractグループに分離できます。

  • クラシック・モードでは、Replicatプロセスがパフォーマンス・ボトルネックの原因となることがあります。それは、Replicatが単一スレッドのプロセスで、通常のSQLを使用して適用する操作が一度に1つであるためです。BATCHSQLを有効にしても(『Oracle GoldenGateリファレンス』を参照)、Replicatで大規模または長時間実行トランザクション、大量で多数の変更列およびLOBデータが含まれる表の処理に時間がかかる場合があります。その場合、トランザクションの整合性が保てるのであれば、それらの表を独自のReplicatグループに分離できます。

ターゲット・システムでのパラレルReplicatグループの使用

この項には、1つのExtractグループを複数のReplicatグループと組み合せる構成を作成する手順を示します。複数のReplicatプロセスで1つの証跡を読み取ることはできます(ディスクの競合を避けるため、3個以下)が、各Replicatを独自の証跡および対応するプロセスと対にすることをお薦めします。

Extractグループの作成

注意:

この構成には、Extractデータ・ポンプが含まれます。

  1. ソースでADD EXTRACTコマンドを使用して、プライマリExtractグループを作成します。
  2. ソースでADD EXTTRAILコマンドを使用して、作成するReplicatグループと同じ数のローカル証跡を指定します。すべての証跡をプライマリExtractグループに関連付ける必要があります。
  3. ソースで、データ・ポンプExtractグループを作成します。
  4. ソースでADD RMTTRAILコマンドを使用して、作成するReplicatグループと同じ数のリモート証跡を指定します。すべての証跡をデータ・ポンプExtractグループに関連付ける必要があります。
  5. ソースでEDIT PARAMSコマンドを使用して、データベース環境に必要なパラメータを含むExtractパラメータ・ファイルをプライマリExtract用に1つ、データ・ポンプ用に1つ作成します。Extractを構成する際、次のようにします。
    • ソース表を異なるTABLEパラメータに分割します。

    • TABLE文を異なる証跡にリンクします。これは、証跡を指定するEXTTRAILまたはRMTTRAILパラメータの後にこの証跡と関連付けるTABLE文を配置することで行います。

Replicatグループの作成
  1. ターゲットで、Replicatチェックポイント表を作成します。手順については、「チェックポイント表の作成」を参照してくださいすべてのReplicatグループで同じチェックポイント表を使用できます。
  2. ターゲットでADD REPLICATコマンドを使用して、作成した各証跡に対するReplicatグループを作成します。ADD REPLICATのEXTTRAIL引数を使用して、Replicatグループを適切な証跡にリンクします。
  3. ターゲットでEDIT PARAMSコマンドを使用して、データベース環境に必要なパラメータを含むReplicatパラメータ・ファイルを各Replicatグループ用に作成します。特定のReplicatグループに対するすべてのMAP文では、そのグループにリンクされた証跡に含まれる同じオブジェクトを指定する必要があります。
  4. ターゲット・システムのManagerのパラメータ・ファイルで、PURGEOLDEXTRACTSパラメータを使用して、証跡からのファイルの消去を制御します。

複数のExtractグループと複数のReplicatグループの使用

複数のExtractグループは独自の証跡に書き込みます。各証跡は、専用のReplicatグループによって読み取られます。

Extractグループの作成

注意:

この構成には、データ・ポンプが含まれます。

  1. ソースでADD EXTRACTコマンドを使用して、プライマリExtractグループを作成します。
  2. ソースでADD EXTTRAILコマンドを使用して、作成した各Extractグループに対するローカル証跡を指定します。
  3. ソースで、作成した各ローカル証跡を読み取るデータ・ポンプExtractグループを作成します。
  4. ソースでADD RMTTRAILコマンドを使用して、作成した各データ・ポンプに対するリモート証跡を指定します。
  5. ソースでEDIT PARAMSコマンドを使用して、各プライマリExtractグループおよび各データ・ポンプExtractグループに対するExtractパラメータ・ファイルを作成します。
Replicatグループの作成
  1. ターゲットで、Replicatチェックポイント表を作成します。手順については、「チェックポイント表の作成」を参照してくださいすべてのReplicatグループで同じチェックポイント表を使用できます。
  2. ターゲットでADD REPLICATコマンドを使用して、各証跡に対するReplicatグループを作成します。ADD REPLICATEXTTRAIL引数を使用して、グループを証跡にリンクします。
  3. ターゲットでEDIT PARAMSコマンドを使用して、各Replicatグループに対するReplicatパラメータ・ファイルを作成します。特定のReplicatグループに対するすべてのMAP文では、そのグループにリンクされた証跡に含まれる同じオブジェクトを指定する必要があります。
  4. ソース・システムおよびターゲット・システムのManagerのパラメータ・ファイルで、PURGEOLDEXTRACTSパラメータを使用して、証跡からのファイルの消去を制御します。

行範囲によるプロセス・グループ間での表の分割

@RANGE関数を使用して、表の行を複数のOracle GoldenGateプロセスで分割できます。これを使用して大規模でアクセスの多い表のスループットを向上でき、データをセットに分割して異なる宛先に分散させることもできます。各範囲をTABLEまたはMAP文のFILTER句に指定します。

@RANGEは安全でスケーラブルです。同じ行は同じプロセス・グループによって必ず処理されることが保証されるため、データ整合性が保たれます。

Replicatを使用するよりも、プライマリExtractまたはデータ・ポンプを使用して範囲を計算する方が効率的な場合があります。範囲を計算するには、Replicatが証跡全体をフィルタし、範囲の指定を満たすデータを見つける必要があります。ただし、ビジネス・ケースに応じて、このフィルタリングをどこで行うかを判断します。

図18-2 2つのExtractグループでの表の行の分割

図18-2の説明が続きます
「図18-2 2つのExtractグループでの表の行の分割」の説明

図18-3 2つのReplicatグループでの表の行の分割

図18-3の説明が続きます
「図18-3 2つのReplicatグループでの表の行の分割」の説明

ネットワークを効率的に使用するためのOracle GoldenGateの構成

ネットワーク間のデータの転送が非効率であると、Extractプロセスの遅延やターゲットでのレイテンシが生じます。これを修正しないと、最終的にはプロセスの障害が生じることがあります。

最初に新しいOracle GoldenGate構成を開始する際には、次のことを行います。

  1. ExtractおよびReplicatで許容可能とみなされる遅延およびスループット・ボリュームのベンチマークを確立します。それぞれが実行するタスクの種類により、通常、ExtractはReplicatより高速であることに注意してください。時間の経過とともに、この違いが通常であるか、チューニングやトラブルシューティングが必要であるかがわかるようになります。

  2. ベンチマークと比較して、定期的なスケジュールを設定して、遅延およびボリュームについてこれらのプロセスを監視します。ときどき急に発生する遅延ではなく、一定または増加中の遅延を探します。継続的な過度の遅延は、Oracle GoldenGate構成のいずれかの場所でボトルネックがあることを示します。これは、Oracle GoldenGateでチューニングが必要であること、またはエラー状態が存在することを示す重大な最初の指標です。

ボリューム統計を表示するには、STATS EXTRACTまたはSTATS REPLICATコマンドを使用します。遅延統計を表示するには、LAG EXTRACTまたはLAG REPLICATコマンドを使用します。詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。

Oracle GoldenGateに影響するネットワーク・ボトルネックの検出

Oracle GoldenGateのスループットに影響するネットワーク・ボトルネックを検出するには、次の手順に従います。

  1. 次のコマンドを発行して、最新の10個のExtractチェックポイントを表示します。ソース・システムでデータ・ポンプExtractを使用している場合、プライマリExtractに対して、またデータ・ポンプに対してもコマンドを発行します。
    INFO EXTRACT group, SHOWCH 10
    
  2. Write Checkpoint統計を探します。これが、Extractが証跡に書き込む場所です。
    Write Checkpoint #1
    
    GGS Log Trail
    Current Checkpoint (current write position):
       Sequence #: 2
       RBA: 2142224
       Timestamp: 2011-01-09 14:16:50.567638
       Extract Trail: ./dirdat/eh
    
  3. プライマリExtractとデータ・ポンプの両方に対して、次を行います。
    • 1つか2つより多いチェックポイントがあるかどうかを確認します。最大で10個あります。

    • 最大の増分番号を持つWrite Checkpoint n見出し(たとえばWrite Checkpoint #8)を探し、SequenceRBAおよびTimestampの値をメモします。これが、最新のチェックポイントです。

  4. メモした情報を参照し、次の検証を行います。
    • プライマリExtractは一連のチェックポイントを生成していますか。または最初のチェックポイントのみを生成していますか。

    • データ・ポンプが使用中の場合、それは一連のチェックポイントを生成していますか。または1つのチェックポイントのみを生成していますか。

  5. プライマリおよびデータ・ポンプのExtractプロセスに対して、再度INFO EXTRACTを発行します。
    • 最新の書込みチェックポイントは増加していますか。前回のINFO EXTRACTコマンド以降、値が増加した場合、表示する最新のSequenceRBAおよびTimestampの値を探します。

  6. 次のコマンドを発行して、Replicatプロセスのステータスを表示します。
    SEND REPLICAT group, STATUS
    
    • ステータスは、Replicatが、遅延(処理するデータを待機中)、データの処理中、または証跡の最後(EOF)であるかどうかを示します。

Replicatのステータスが遅延モードまたは証跡ファイルの最後であり、次のいずれかがtrueである場合、ネットワーク・ボトルネックが存在します。

  • プライマリExtractのみを使用していて、その書込みチェックポイントが増加していないか、増加が非常に遅い場合。このExtractプロセスはネットワーク全体のデータを送信する役割を持つため、最終的に、抽出されたデータのバックログを格納するメモリーを使い果して異常終了します。

  • データ・ポンプを使用していて、その書込みチェックポイントが増加していないが、プライマリExtractの書込みチェックポイントは増加している場合。この場合、プライマリExtractはローカル証跡に書き込むことができますが、データ・ポンプはリモート証跡に書き込むことができません。抽出されたデータのバックログを格納するメモリーを使い果すと、データ・ポンプは異常終了します。プライマリExtractは、証跡順序の最後のファイルに到達するまで実行され、チェックポイントを作成できなくなるため異常終了します。

注意:

ネットワークが停止している場合でも、Replicatは、証跡の残りのデータのすべてをターゲットに適用するまで、通常の方法で処理を行います。最終的に、証跡ファイルの最後に到達したことが報告されます。

データ・ポンプの使用による帯域幅の制限の回避

並列のデータ・ポンプを使用すると、ネットワーク構成のプロセスごとに課せられている帯域幅の制限を回避できます。並列のデータ・ポンプを使用して、同じターゲット・システムや別のターゲット・システムにデータを送信できます。また、データ・ポンプはプライマリExtractからTCP/IPの役割を除去し、そのローカル証跡によりフォルト・トレランスが提供されます。

Oracle GoldenGateの帯域幅の要件の削減

RMTHOSTパラメータの圧縮オプションを使用して、データを圧縮してからネットワーク全体に送信します。圧縮によるメリットと、圧縮を実行するのに必要なCPUリソースを比較検討します。詳細は、『Oracle GoldenGateリファレンス』を参照してください。

TCP/IPパケット・サイズの増加

RMTHOSTパラメータのTCPBUFSIZEオプションを使用して、Extractが保持するTCPソケット・バッファのサイズを制御します。バッファ・サイズを増やすと、ターゲット・システムにより大きなパケットを送信できます。詳細は、『Oracle GoldenGateリファレンス』を参照してください。

ネットワークに最適なバッファ・サイズを決定するためのガイドラインとして、次の手順を使用します。

  1. コマンド・シェルからpingコマンドを実行し、次の例に示すような平均ラウンド・トリップ時間(RTT)を取得します。
    C:\home\ggs>ping ggsoftware.com
    Pinging ggsoftware.com [192.168.116.171] with 32 bytes of data:
    Reply from 192.168.116.171: bytes=32 time=31ms TTL=56
    Reply from 192.168.116.171: bytes=32 time=61ms TTL=56
    Reply from 192.168.116.171: bytes=32 time=32ms TTL=56
    Reply from 192.168.116.171: bytes=32 time=34ms TTL=56
    Ping statistics for 192.168.116.171:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 31ms, Maximum = 61ms, Average = 39ms
    
  2. この値にネットワーク帯域幅を掛けます。たとえば、平均RTTが0.08秒で帯域幅が100MB/秒の場合の最適なバッファ・サイズは次のようになります。
    0.08 second * 100 megabits per second = 8 megabits
    
  3. この結果を8で割り、バイト数を決定します(8ビットから1バイトに変換します)。たとえば、次のようになります。
    8 megabits / 8 = 1 megabyte per second
    

    TCPBUFSIZEで必要な単位はバイトなので、この値を1000000に設定します。

Windows以外のシステムの最大ソケット・バッファ・サイズは、通常デフォルトで制限されています。Oracle GoldenGateがTCPBUFSIZEで構成するバッファ・サイズを増やすことができるように、システム管理者にソースおよびターゲット・システムのデフォルト値を増やすように依頼してください。

ディスクI/Oボトルネックの除外

I/Oアクティビティによって、ExtractとReplicatの両方にボトルネックが発生することがあります。

  • 標準Extractでは、証跡へのディスク書込みおよびデータソースからのディスク読取りが生成されます。

  • データ・ポンプおよびReplicatでは、ローカル証跡からのディスク読取りが生成されます。

  • 各プロセスは、定期的なスケジュールで、リカバリ・チェックポイントをそのチェックポイント・ファイルに書き込みます。

システム構成内のI/Oパフォーマンスの向上

証跡ファイルを含むディスク・サブシステムでI/O待機が発生している場合、実行可能な最速のディスク・コントローラにその証跡を配置します。

RAID構成を確認します。Oracle GoldenGateはデータを順次書き込むため、I/Oの速度が低下しこれらのタイプのファイルには不要なチェックサムを使用するRAID 5よりも、RAID 0+1 (ストライピングおよびミラーリング)をお薦めします。

Oracle GoldenGate構成内のI/Oパフォーマンスの向上

Oracle GoldenGate内で構成の変更を行うことによって、I/Oパフォーマンスを向上させることができます。次のパラメータの値を増加してみてください。

  • CHECKPOINTSECSパラメータでは、ExtractおよびReplicatがルーチンのチェックポイントを作成する頻度を制御します。

    注意:

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

  • GROUPTRANSOPSパラメータでは、標準モードでの動作時に1つのReplicatトランザクションに含まれるSQL操作数を制御します。Replicatトランザクションに含まれる操作数を増やすと、Replicatが実行するトランザクション数の削減、およびチェックポイント・ファイルと(使用されている場合)チェックポイント表へのI/Oアクティビティの削減によって、Oracle GoldenGateのパフォーマンスが向上します。Replicatは、定期的なチェックポイントに加えて、ターゲットにトランザクションを適用するたびにチェックポイントを発行します。

    注意:

    インバウンド・サーバー・パラメータparallelismが1に設定されていないかぎり、GROUPTRANSOPSは、Oracleデータベース・システムの統合Replicatには無効です。

  • EOFDELAYまたはEOFDELAYCSECSパラメータでは、Extract、データ・ポンプまたはReplicatが、データ・ソース内の現在のデータの末尾に到達した後に、新しいデータを確認する間隔を制御します。このパラメータの値を増やすと、新しいデータの読取りによるシステムI/Oのオーバーヘッドを低減できます。

注意:

これらのパラメータの値を増やすと、パフォーマンスは向上しますが、プロセスが失敗したときに再処理が必要なデータ量も増加します。これは、ソースとターゲット間のレイテンシ全体に影響を及ぼします。一部のテストは、リカバリとパフォーマンスとの間の最適なバランスを決定するのに役立ちます。

仮想メモリーとページングの管理

Oracle GoldenGateはコミットされたトランザクションのみをレプリケートするため、トランザクションのコミットまたはロールバックを受信するまで、キャッシュと呼ばれる管理仮想メモリー・プールに各トランザクションの操作を保持します。1つのグローバル・キャッシュが1つのExtractまたはReplicatプロセスの共有リソースとして機能します。Oracle GoldenGateキャッシュ・マネージャは、オペレーティング・システムのメモリー管理機能を利用して、Oracle GoldenGateプロセスを持続的かつ効率的に機能させます。CACHEMGRパラメータでは、Oracle GoldenGateによって処理中のコミットされていないトランザクション・データのキャッシュに使用可能な仮想メモリーおよび一時ディスク領域の量を制御します。

プロセスの起動時、次の例に示すように、キャッシュ・マネージャによって仮想メモリーのリソースの可用性が確認されます。

CACHEMGR virtual memory values (may have been adjusted)CACHESIZE: 32GCACHEPAGEOUTSIZE (normal): 8M PROCESS VM AVAIL FROM OS (min): 63.97GCACHESIZEMAX (strict force to disk): 48G

現在のリソースでは不十分な場合、次のようなメッセージが返されます。

2013-11-11 14:16:22 WARNING OGG-01842 CACHESIZE PER DYNAMIC DETERMINATION (32G) LESS THAN RECOMMENDED: 64G (64bit system)vm found: 63.97GCheck swap space. Recommended swap/extract: 128G (64bit system).

システムでページングが過度に発生し、クリティカルなプロセスのパフォーマンスに影響する場合、CACHEMGRパラメータのCACHESIZEオプションの値を小さくします。スワップ・ディレクトリに割り当てられるディスク領域の最大量をCACHEDIRECTORYオプションで制御することもできます。CACHEMGRの詳細は、『Oracle GoldenGateリファレンス』を参照してください。

データのフィルタリングおよび変換の最適化

大量のデータ・フィルタリングまたはデータ変換によって、処理のオーバーヘッドが追加されます。システム上の他のプロセスにおけるこのオーバーヘッドの影響を最小限にするための推奨事項を、次に示します。

  • プライマリExtractをデータのフィルタおよび変換に使用しないでください。データ取得専用にします。これにより、パフォーマンスは向上し、それらのアクティビティによって生じるプロセスの障害に対して脆弱ではなくなります。目的は、プライマリExtractプロセスが実行中であり、トランザクション・ボリュームに対応していることを確認することです。

  • フィルタリングおよび変換を実行するために、Replicatまたはデータ・ポンプを使用します。次のいずれかの構成を考慮します。

    • システムがオーバーヘッドを許容できる場合、ソースでデータ・ポンプを使用します。この構成は、使用されるネットワーク帯域幅が少ないため、フィルタリングされるデータのボリュームが大きい場合に適しています。フィルタリングされたデータのみがターゲットに送信され、これはセキュリティの考慮事項にも役立ちます。

    • 中間システムでデータ・ポンプを使用します。この構成はソース・システムおよびターゲット・システムにオーバーヘッドがない状態を保持しますが、フィルタリングされていないデータがソース・システムから中間システムに送信されるため、ネットワーク帯域幅が多く使用されます。

    • システムがオーバーヘッドを許容できる場合、および大量のフィルタリングされていないデータを送信するのに十分なネットワーク帯域幅がある場合、ターゲットでデータ・ポンプまたはReplicatを使用します。

  • システム・リソースに制限がある場合、最も適切ではない選択肢は、ExtractとReplicat間でフィルタリングと変換の操作を分けることです。

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をトリガーする場合があります。

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

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

  • Collectorの異常終了(ほとんど発生しないイベントです)。

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

  • Extractデータ・ポンプの異常終了または停止。

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

詳細は、『Oracle GoldenGateリファレンス』を参照してください。