6.1 比較ジョブが遅い

比較ジョブを開始すると、5つのフェーズ(保留、初期化、ソート、初回比較とCOOS、および終了)で実行されます。これらのフェーズのいずれかのラグが原因で、比較ジョブが遅くなります。

停止または遅延しているフェーズを確認するには:
  1. Veridata UIで、「実行中のジョブ」を選択し、「比較ペア別に表示」を選択します。

  2. 「拡張フィルタ・オプション」をクリックし、「実行フェーズ」列のステータスを確認します。

「実行フェーズ」に示されたステータスに基づいて、問題を解決するステップに従います。

6.1.1 ソート・フェーズ

ソート・フェーズで発生する可能性のある最も一般的な問題とその解決策を、この項にリストします。

ソートが遅いまたは停止している

これは、次の理由により、ソース・データベースまたはターゲット・データベースからデータをフェッチする際にラグが発生した場合に発生します:
  • ソートがデータベースで実行されている

    データベースでソートする場合、処理が遅くなる可能性があります。サーバー(Veridataサーバー)でソートしたほうが速いのでお薦めします。

    ノート:

    サーバーのソートでは、サーバーのメモリー使用量が増えますが、高速です。
    サーバーでのソートの有効化、およびソート構成の詳細は、「ソートの構成」を参照してください。
  • ソート・ディレクトリに割り当てられているメモリーが不足している

    Veridataは、ソートされたデータをディスクに格納するため、ディスクの領域が不足すると、ソート・プロセスが遅くなる可能性があります。この低速化を回避するには、ソート・ディレクトリに十分な領域が割り当てられていることを確認します。

    ソート・ディレクトリとその場所については、ソート・ディレクトリを参照してください。

    ソート・ディレクトリのメモリー要件の詳細は、ソートのメモリーおよびソート・ディレクトリを参照してください。

    メモリーにマップされたソート・ディレクトリを変更するには:

    メモリーにマップされたソート・ディレクトリは、.mapファイルが生成される場所です。デフォルトでは、オペレーティング・システムの一時ディレクトリですが、veridata.cfgファイルから変更できます:

    server.memory_mapped_sort_directory directorypath

    例: server.memory_mapped_sort_directory directorypath/tmp2

    server.max_sort_memory以外に、veridata.cfgファイルの次のパラメータを変更して、ソート・プロセスを高速化することもできます。
    • server.concurrent.writers: ソート・ディレクトリ当たりのライター・スレッドの数。

    • server.number_sort_threads: エージェントからの入力バッファのソートに使用されるスレッドの数。この数は、使用可能なプロセス数より大きくすることはできません。

    • server.concurrent.readers: サーバー全体のリーダー・スレッドの数。

    詳細は、server.memory_mapped_sort_directoryを参照してください。

  • 比較フェッチ・サイズ

    比較プロセスを高速化するには、接続設定で比較フェッチ・サイズを変更することで、データベースからフェッチされる行数を増やすことができます。10,000から開始し、最大100,000まで増やします。

    「比較フェッチ・サイズ」を参照してください。

    この値を大きくすると、初期比較中にフェッチ・プロセスが高速化されます。値を変更した後、比較を再度実行します。

データベースで停止している問合せ

問合せが停止しているかどうかを確認するには:

Veridata UIで、「実行中のジョブ」を選択し、「比較ペア別に表示」を選択します。

「拡張フィルタ・オプション」をクリックし、最後のソースのフェッチ列および最後のターゲットのフェッチ列の値を確認します。ソースおよびターゲットのすべての行がフェッチされていなくても、これらの値が変更されない場合は、ソース・フェッチ・レイテンシおよびターゲット・フェッチ・レイテンシ列の値を確認します。
  • レイテンシ値が高い場合、サーバーとエージェント間またはエージェントとDB間のネットワークが遅い可能性があります。

  • 必要なすべての値が正常な場合は、データベースで実行中の問合せが完了していない可能性があります。

ソースDBとターゲットDBの両方で問合せが実行中であるか、停止しているかを確認するには、「データベース内の停止されている問合せの確認」を参照してください。

比較ペアが停止している

すべてのパラメータを変更しても比較ペアが停止したままの場合は、既存の実行を取り消して、その特定の比較ペアを再実行します。実行が正常に完了したことを確認します。

6.1.2 初期比較フェーズ

初回比較または初回比較とCOOSフェーズで発生する問題は、ソース・データとターゲット・データの比較の遅れが原因です。この項では、これらの問題に対する考えられる解決策を示します。

表にキー列があるかどうかの確認

キー列のパフォーマンスを向上させるには、主キー(PK)列の指定を参照してください。

デルタ比較の使用

比較を加速するためにデルタ比較を有効にするには、デルタ比較を参照してください。

ソースおよびターゲットのOracleオプティマイザ・ヒント

データベースがOracleの場合、オプティマイザ・ヒントを使用して問合せの処理を改善できます。

オプティマイザ・ヒントを参照してください。

最大同時比較スレッドの管理

複数の比較ペアを並列で実行すると、全体的な比較時間が短縮されます。

「最大同時比較スレッド」を参照してください。

自動パーティション、行パーティションまたは表パーティションの使用

大規模なソース表とターゲット表をパーティションに分割できます。パーティション化を参照してください。

ROWSCNの設定

表の完全な比較をスキップし、特定のSCN値の後のデータを比較するには、このパラメータを設定します。ROWSCNを参照してください。

比較ペアが停止している

すべてのパラメータを変更しても比較ペアが停止したままの場合は、既存の実行を取り消して、その特定の比較ペアを再実行します。実行が正常に完了したことを確認します。

6.1.3 COOSフェーズ

実行フェーズCOOSまたは初回比較およびCOOSで、初回比較フェーズで推奨される最適化によって問題が解決されなかった場合は、この項にリストされている解決策に従います。

COOS結合またはCOOSバッチ・フェッチ

DBがOracle DBで、一時表機能がサポートされている場合は、COOS結合を使用します。それ以外の場合は、COOSバッチ・フェッチを使用します。

一時表がサポートされているかどうかを確認するには、DBでcreate private temporary tableコマンドを実行します。

詳細は、「COOS結合」および「COOSバッチ・フェッチ」を参照してください。

ノート:

COOS結合とCOOSバッチ・フェッチの両方を一緒に使用しないでください。1つのオプションを使用します。

COOSバッチ・サイズの更新

「COOSバッチ・サイズ」を参照してください。

ソースおよびターゲットのOracleオプティマイザ・ヒント

データベースがOracleの場合、オプティマイザ・ヒントを使用して問合せの処理を改善できます。

オプティマイザ・ヒントを参照してください。

データベース内で停止している問合せの確認

様々なデータベース内の停止されている問合せを確認する方法の詳細は、「データベース内の停止されている問合せの確認」を参照してください。

比較ペアが停止している

すべてのパラメータを変更しても比較ペアが停止したままの場合は、既存の実行を取り消して、その特定の比較ペアを再実行します。実行が正常に完了したことを確認します。

ハードウェアのスケーリング(メモリーおよびプロセッサ)

前述の手順で比較を加速できない場合は、ハードウェアをスケールアップします。

RAM: 単一のマシンにメモリーを追加すると、マルチプロセッサが可能になり、大量のメモリーを必要とするアプリケーションのパフォーマンスが向上します。データベース・サイズに基づいて、メモリーにはデータ・サイズの約60%が必要です。

プロセッサ: より強力なCPUにアップグレードしたり、既存のCPUにコアを追加したりすると、処理能力が向上し、システム速度が速くなり、より複雑な計算が可能になります。

6.1.4 データベース内で停止している問合せの確認

データベースにログインし、問合せが実行中であるか、停止しているかを確認します。

表6-1 データベース内で停止している問合せ

データベース 問合せ 出力
MySQL/ MariaDB SHOW PROCESSLIST;

アクティブなクエリーとそのステータスをリストします。

Lockedステータスの問合せを探します。

PostgreSQL SELECT pid, state, query, age(clock_timestamp(), query_start) AS duration FROM pg_stat_activity WHERE state <> 'idle';

実行中のクエリーとその状態をすべてリストします。

長時間実行の問合せを期間で識別できます。

Microsoft SQL Server SELECT session_id,status,command,wait_type,wait_time,wait_resource,cpu_time,total_elapsed_time,query_text.text AS query_text FROM sys.dm_exec_requests CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS query_text WHERE session_id > 50; -- Exclude system sessions

リソースで待機している問合せなど、問合せの実行に関する詳細情報を表示します。

Oracle DB SELECT s.sid, s.serial#, s.status, s.username, s.sql_id, t.sql_text FROM v$session s JOIN v$sqltext t ON s.sql_id = t.sql_id WHERE s.status = 'ACTIVE'; すべてのアクティブ・セッションとそのSQLテキストをリストします。
SQLite PRAGMA database_list;PRAGMA locking_mode; すべてのアクティブ・セッションとそのSQLテキストをリストします。