Chat now with support
Chat with Support

SharePlex 8.6.6 - 管理ガイド

このガイドについて このガイドで使用されている表記規則 SharePlex の概要 SharePlex の実行 複数の SharePlex インスタンスの実行 sp_ctrl でのコマンドの実行 SharePlex パラメータ 複製のための Oracle 環境の準備 設定ファイルの作成 オープンターゲットのターゲットへの複製の設定 複製方法の設定 分割レプリケーションの設定 名前付きキューの設定 変更履歴ターゲットを維持するための SharePlex の設定 Oracle DDL の複製 エラー処理のセットアップ データの変換 SharePlex セキュリティ機能の設定 実稼動環境での複製のアクティベート SharePlex の監視 複製上の問題の防止および解決方法 非同期データの修復 Oracle の高可用性を維持するための手順 アクティブな複製環境の変更 Oracle アプリケーションのパッチまたはアップグレードの適用 ソースまたはターゲット上の Oracle データのバックアップ Capture プロセスのチューニング Post プロセスのチューニング 付録 A:ピアトゥピアの説明図 付録 B:SharePlex 環境変数

INDEX ヒントの使用

Post プロセスのチューニング > INDEX ヒントの使用

対象:Oracle ターゲット

 

SharePlex がターゲットテーブルで UPDATE や DELETE を実行すると、Oracle は SharePlex にとって最も効率的なインデックスを選ばない場合もあります。正しいインデックスがない場合、複数の UPDATE や DELETE が実行されると Post プロセスは速度が低下します。SharePlex では、Oracle の INDEX ヒントを利用して、強制的にターゲットオブジェクトで正しいインデックスを使用できます。

INDEX ヒントを使用するには、hints.SID ファイルを使用します。ここで、SID はターゲットインスタンスの ORACLE_SID です。Post は、SQL 文を適用するときにヒントファイルを読み込みます。ファイルがエントリを備えている場合、Post はデータをメモリに読み込んで、処理するそれぞれの UPDATE および DELETE 文をチェックします。このような操作のいずれかにおいてヒントファイルに記載されているテーブルが必要になる場合、Post は Oracle にヒントを送ります。

ヒントを必要とするテーブルにのみヒントを使用します。たとえば、定義済みのインデックスがあるテーブルに対して Post がフルテーブルスキャンを行っている場合は、そのテーブルに対してのみヒントを使用します。ヒントを使用すると、Post は、ファイルにリストされている各操作の hints.SID ファイルを読み取ります。大量のテーブルがリストされている場合、これで処理速度が低下する可能性があります。

デフォルトのヒント(テーブルとインデックスのペア)の最大数は 100 です。この値は、SP_OPO_HINTS_LIMIT パラメータを使って調整できます。詳細については、『 SharePlex リファレンスガイド』を参照してください。

すべてのインデックスが有効であることを確認します。SharePlex はインデックスが無効であってもヒントとして使用しますが、Oracle は無効なヒントを無視し、エラーを返します。SharePlex は、指定されたヒントに関する異常を検出した場合に以下の情報を event_Log に書き込みます。

15050 – hint file not found

17000 – error opening hint file

15051 – missing column in the hint file (either table or index name)

15052 – syntax error for tablename

15053 – syntax error for indexname

15054 – source table’s object_id not found in object cache

15055 – more than 20 valid entries were entered into the hints file

ヒントファイルを使用するには

各システムの SharePlex 変数データディレクトリに空の hints.SID ファイルがあります。ターゲットシステム上に常駐する hints.SID ファイルを使用します。ヒントファイルが存在しない場合は、このディレクトリ内にヒントファイルを作成し、hints.SID 形式の名前を付けます。

  1. Post を停止します(実行されている場合)。
  2. ファイルを開きます。
  3. コメント行は、ファイル内のどこにでも追加できます。コメント行は、ポンド記号(#)で開始します。
  4. 非コメント行で、以下のテンプレートを使用して、ソーステーブルとそのテーブルに使用するインデックスを指定します。テーブル名とインデックス名の間にはスペースを 1 つ以上挿入します。それぞれの指定は別個の行に配置します。

    src_owner.table

    tgt_owner.index

    例:

    scott.emp

    scott.emp_index

SQL Cache のチューニング

Post プロセスのチューニング > SQL Cache のチューニング

SharePlex は、頻繁に使用される SQL 文を再利用に備えてキャッシュします。そのため、反復のたびに解析してバインドする必要がありません。これは SharePlex の調整可能な機能であり、SQL Cache と呼ばれます。この機能は、アプリケーションが繰り返し生成する文の量に基づく利点を最大限に活用するようにチューニングできます。

SQL Cache は、データ値以外の変更なしで同じ SQL 文が何度も発行される場合にのみ Post のパフォーマンスを改善します。それが作業環境に当てはまらない場合、SQL Cache は Post プロセスに不要なオーバーヘッドを付け加えるため、それを無効にします。

サポートされるターゲット

すべて

SQL Cache の有効化または無効化

SQL Cache は以下のように制御します。

Oracle

パラメータ 説明

SP_OPO_SQL_CACHE_DISABLE

SQL Cache を有効化または無効化します。デフォルトは有効であり、値は 0 です。SQL Cache を無効にするには、パラメータを 1 に設定します。バッチ操作の場合にのみ SQL Cache を無効にするには、パラメータを 3 に設定します。これで、Post によるメモリ使用量を削減できます。

SP_OPO_MAX_CDA

Post セッションごとにキャッシュするアクティブな文の数を決定します。Post はデフォルトでセッション当たり 50 個のカーソルを開きます。この設定は、必要ならば増減できます。その他の重要な情報については、「オープンカ―ソルの調整」を参照してください。

オープンターゲット 

パラメータ 説明

SP_OPX_SQL_CACHE_DISABLE

SQL Cache を有効化または無効化します。デフォルトは有効であり、値 0 です。SQL Cache を無効にするには、パラメータを 1 に設定します。

target コマンドを使用します。

target r.database [queue queuename] set resources max_active_statements=number_of_active_statements

Post セッションごとにキャッシュするアクティブな文の数を決定します。オープンターゲットデータベースの場合、Post は許可されるアクティブな文の数を ODBC ドライバから取得します。その値が max_active_statements の設定よりも小さい場合、Post は停止してエラーを返します。SQL Cache 機能を無効にするか、max_active_statements の値を減らすことができます。

SQL Cache のチューニングによるパフォーマンスの最大化

アクティブな文の数を、複製される操作向けに最適化するには、次の手順を実行します。

  1. sp_ctrl を実行して show post detail コマンドを発行し、キャッシュした文のヒット率を判断します。
  2. SQL cache hit count フィールドを探します。このフィールドには、「解析およびバインドなしに実行されるメッセージの総数」を「INSERT、UPDATE、DELETE 操作の総数」で割った比率が表示されます。たとえばヒット率 36% とは、キャッシュした文を時間全体の 36% において Post が使用していることを示します。
  3. 代表的な複製活動の数日後にヒット率を表示して、アクティブな文の数に最適な設定を判断します。ヒット率が 50% 未満の場合は、だいたい 5 文ずつ小刻みにパラメータ値を増やします。
  4. 数日間ヒット率を監視します。ヒット率が増加した場合は、アプリケーションがアクティブな文に利用可能なすべてのカーソルを使用していることを意味します。ヒット率が一定になるまで、さらにパラメータ値を小刻みに増やします。

オープンカーソルの調整

Post プロセスのチューニング > オープンカーソルの調整

対象:Oracle ターゲット

 

Oracle パラメータ OPEN_CURSORS の値は、Post プロセスの想定パフォーマンスレベルに十分対応できるように高く設定する必要があります。このパラメータは、プロセス(Post など)が開くことができるカーソルの最大数を定義します。

Post は、ルーチンコールに必要な 10 を引いた OPEN_CURSORS の値からオープンカーソルの合計最大数を内部で確立します。この値を event_log に表示します。次の例の場合、OPEN_CURSORS は 512 に設定されています。

Notice: sp_opst_mt (for o.oracle-o.oracle queue oracle) Post will not open more than 502 cursors (OPEN_CURSORS – 10).

Post はオープンなカーソルの数の記録を維持します。カーソルの最大数を上回ることを Post が検出すると、Post は直前に使用したセッションで直前に使用したカーソルを閉じます。

カーソルの不足を防止するために、Post プロセスはプロセス開始時に OPEN_CURSORS 値を問い合わせます。この値が十分に高くない場合、Post は event_log に次の警告を書き込みます。

Warning:(sp_opst_mt for o.oracle-o.oracle queue oracle)Oracle parameter 'OPEN_CURSORS' is < number.Check 'OPEN_CURSORS' setting.

OPEN_CURSORS の値が存在しない場合、変更または追加できます。

OPEN_CURSORS の値を表示するには、次の SQL 文を使用してデータベースをクエリします。

select value from v$parameter where name = 'open_cursors' ;

Post プロセス用に十分な OPEN_CURSORS の値を推定するには

  1. ターゲットインスタンスについて予測される並行トランザクション(セッション)のピーク数を推定します。Post は、ソースシステムのセッションごとにターゲットシステムのセッションを開きます。実稼働が最大レベルにあるときに sp_ctrl show post detail コマンドを発行すると、適切に推定できます。ディスプレイの Number of Open Transactions フィールドは、並行トランザクション数を表示します。
  2. 次の式を使用して、OPEN_CURSORS で SharePlex(およびターゲットデータにアクセスする可能性があるその他のアプリケーション)をサポートするための正しい設定を決定します。

    SQL Cache が有効な場合(デフォルト):デフォルトでは、Post は、終了時にいったん閉じるルーチンコールに備えて 10 個のカーソルを、さらにトランザクション当たり少なくとも 7 個のカーソルを確保しておく必要があります(基本最小数 2 個に加えてさらに 5 個)。式は次のとおりです。

    10 +(並行トランザクションのピーク数 x 7)= 必要最小オープンカーソル数

    SQL Cache を無効にした場合: Post プロセスは、終了時にいったん閉じるルーチンコールに備えて 10 個のカーソルを、さらにトランザクション当たり少なくとも 2 個のカーソルを確保しておく必要があります。式は次のとおりです。

    10 +(並行トランザクションのピーク数 x 2)= 必要最小オープンカーソル数

メンテナンス DML のスキップ

Post プロセスのチューニング > メンテナンス DML のスキップ

対象:Oracle ターゲット

 

アプリケーションパッチやその他の内部 Oracle 操作によって適用される大規模トランザクションがユーザーアプリケーションで必要なデータと無関係である場合は、複製から除外できます。このような操作は、SharePlex の数千または数百万もの個別の UPDATE または DELETE 文に変換される場合があります。これらの文はすべて Post により適用されます。このようなトランザクションは Post のパフォーマンスに悪影響を与え、ユーザーアプリケーションでの処理に必要なソースデータとターゲットデータ間の遅延を増加させる可能性があります。何らかの理由で、その他の DML 操作がターゲットデータベースにポストされないようにすることが必要な場合もあります。

そのようなトランザクションを処理する方法は 2 つあります。

  • そのような操作とユーザーデータの間に参照関係がない場合は、専用の名前付き post キューを経由して処理するように操作を設定します。詳細については、「名前付き post キューの設定」を参照してください。
  • 操作をスキップするように Post を設定し、Oracle から SQL 文を直接適用します。次の手順を参照してください。

メンテナンス DML をスキップするには

  1. ソースシステムで、SharePlex 製品ディレクトリ下の util サブディレクトリから、create_ignore.sql スクリプトを実行します。このスクリプトは、データベース内に SHAREPLEX_IGNORE_TRANS パブリックプロシージャを作成します。トランザクション開始時にプロシージャを実行すると、トランザクションがコミットまたはロールバックされるまでの間に発生した DML 操作を無視するように、Capture プロセスに指示が行われます。したがって、影響された操作は複製されません。スクリプトとその制限、および実行方法の詳細については、『 SharePlex リファレンスガイド』の create_ignore.sql を参照してください。
  2. UPDATE または DELETE 操作前に SHAREPLEX_IGNORE_TRANS を呼び出すように、パッチスクリプトを編集します。これにより、SharePlex はトランザクションを無視し、ターゲットには送信しません。データベースを同期状態に戻すために、このスクリプトはターゲット上でも実行する必要があります。

:DML 操作のみがこの SHAREPLEX_IGNORE_TRANS プロシージャによって影響されます。TRUNCATE を含む DDL 操作は SharePlex によってスキップされません。DDL 操作は暗黙的に Oracle によってコミットされているので、プロシージャを無効にします。

Related Documents

The document was helpful.

Select Rating

I easily found the information I needed.

Select Rating