データベースのプール サイズと実行時インスタンス数

ほとんどの Spectrum™ Technology Platform 環境において、バッチ ジョブであるか、Web サービスまたは API 要求に応答するサービスであるかの違いはあれ、複数のフローが同時に実行しています。同時処理を最適化するために、データベースのプール サイズ設定が使用できます。これによって、Spectrum のデータベースが処理する同時要求数と、同時に実行するフロー ステージのインスタンス数を制御する実行時インスタンス数が制限されます。最適なパフォーマンスを得るには、これら 2 つの設定を同時にチューニングする必要があります。

データベースのプール サイズ

Spectrum データベースには、住所の検証で使用する郵便データや、住所のジオコードで使用するジオコーディング データなど、特定のステージで使用するリファレンス データが含まれます。これらのデータベースは、それを使用するデータフロー ステージやサービスから同時に行われる複数の要求を受け付け、データフローの要求やサービスの要求のパフォーマンスを高めるように設定することが可能です。データベースのプール サイズは、Spectrum のデータベースが処理する同時要求の最大数を設定します。デフォルトでは、Spectrum データベースのプール サイズは 4 で、データベースは 4 つの要求を同時に処理できることを意味します。

最適なプール サイズはモジュールによって異なります。一般的には、サーバーが搭載する CPU の数の半分から 2 倍のプール サイズを設定すると、最適な結果が得られます。ほとんどのモジュールに最適なプール サイズは CPU 数と同数です。例えば、サーバーが 4 つの CPU を搭載している場合は、プール サイズを 2 (CPU 数の半分) ~ 8 (CPU 数の 2 倍) の間で試すことができ、多くの場合、最適なサイズは 4 (CPU 数と同数) です。

プール サイズを変更するときは、データベースにアクセスするステージ用としてデータフローに指定されている実行時インスタンスの数を考慮する必要もあります。例えば、1 つの実行時インスタンスを使用するように設定された Geocode US Address ステージを持つデータフローがあるとします。この場合、米国ジオコーディング データベースのプール サイズを 4 に設定しても、パフォーマンスは向上しません。実行時インスタンスが 1 つしかないので、データベースへの要求は一度に 1 つになります。ただし、Geocode US Address の実行時インスタンスの数を 4 つに増やすと、パフォーマンスが向上します。データベースに同時にアクセスする Geocode US Address のインスタンスが 4 つあるので、プール全体を使用できます。

実行時インスタンス

データフローの各ステージはそれぞれのスレッドで非同期に動作し、他のステージから独立しています。このため、データフロー内の複数ステージが並列処理され、1 つのステージに対して複数の実行時インスタンスを利用することができます。これは、データの処理時間が異なるステージで構成されるデータフローで役に立ちます。その結果、スレッド間での作業の分配のバランスが悪くなる可能性があります。例えば、次の 2 つのステージで構成されるデータフローを考えてみましょう。



ステージの設定によって、Validate Address ステージが Geocode US Address ステージより速くレコードを処理することがあります。その場合、データフロー実行のある時点で、Validate Address はすべてのレコードを処理していますが、Geocode US Address にはまだ未処理のレコードがあります。このデータフローのパフォーマンスを向上させるには、最も速度の遅いステージ (この場合は Geocode US Address) のパフォーマンスを向上させる必要があります。その方法の 1 つは、ステージの実行時インスタンスを複数指定することです。例えば、実行時インスタンス数を 2 に設定すると、そのステージのインスタンスが 2 つになります。各インスタンスはそれぞれのスレッド内で動作し、レコードの処理に使用することができます。

一般的なルールとして、実行時インスタンス数は、少なくともリモート コンポーネントのインスタンス数と等しくなければなりません。リモート コンポーネントの詳細については、『 管理ガイド』を参照してください。複数の実行時インスタンスを指定するとパフォーマンスが向上しますが、この値を高くしすぎると、システムのリソースに負荷がかかり、パフォーマンスが低下する可能性があります。

注: 複数の実行時インスタンスを使用してパフォーマンスが向上するのは、複数のレコードを使用するジョブまたはサービス要求を実行する場合のみです。

チューニング手順

データベースのプール サイズと実行時インスタンス数に適切な値を設定するには、さまざまな設定を試して、リソースに過度に負荷をかけたりパフォーマンスを低下させたりすることなく、使用可能なサーバー リソースを最大限に活用できる設定を見つける必要があります。

注: データベースのプール サイズを調整する前にデータフローのプール サイズを最適化する必要があります。データフローのプール サイズの最適化については、「データフローのプール サイズ」を参照してください。
  1. まず、さまざまな設定を試す際に使用するサンプル データを見つけます。実行時間の測定や一貫性の確認ができるように、サンプル データセットは十分に大きい必要があります。またサンプル データは、実際に処理するデータを代表するものでなければなりません。例えば、ジオコーディングのパフォーマンス テストを行う場合は、ジオコードする予定のすべての国に対して同数のレコードがテスト データに含まれるようにします。
  2. 郵便データベースやジオコーディング データベースなど、データベース リソースの使用が必要なサービスまたはデータフローをテストする場合は、データベースの最新版がインストールされていることを確認してください。
  3. サンプル データを用意し、最新のデータベース リソースをインストールしたら、ファイルからデータを読み込み、最適化したいステージでそれを処理し、ファイルに書き出す、簡単なデータフローを作成します。例えば、Validate Address のパフォーマンス設定をテストする場合は、Read from File、Validate Address、Write to File で構成されるデータフローを作成します。
  4. データベース リソースのプール サイズを 1 に設定します。
    1. Management Console を開きます。
    2. [リソース] > [Spectrum データベース] に移動します。
    3. 最適化するデータベース リソースを選択し、変更ボタン をクリックします。
    4. [プール サイズ] フィールドに、1 と入力します。
    5. [OK] をクリックします。
  5. ステージの実行時インスタンスを 1 に設定します。
    1. Enterprise Designer でデータフローを開きます。
    2. 複数の実行時インスタンスを使用するように設定するステージをダブルクリックします。
    3. [実行時] をクリックします。
      注: すべてのステージで複数の実行時インスタンスを使用できるわけではありません。ステージのウィンドウの下部に [実行時] ボタンがない場合、そのステージでは複数の実行時インスタンスを使用できません。
    4. [ローカル] を選択して 1 を指定します。
    5. [OK] をクリックして [実行時パフォーマンス] ウィンドウを閉じます。さらに [OK] をクリックしてステージを閉じます。
  6. データフローを複数回実行し、次の各項目の平均値を記録することによって、ベースライン パフォーマンスを算出します。
    • 経過時間
    • CPU 使用率
    • メモリ使用率
    ヒント: JMX コンソールを使用してパフォーマンスをモニタリングできます。詳細については、JMX コンソールによるパフォーマンスのモニタリングを参照してください。
  7. ジョブの複数インスタンスの同時実行をサポートする必要がある場合は、それを実行します。それぞれの場合に対して、経過時間、CPU 使用率、メモリ使用率を記録します。
    ヒント: ファイル モニターを使用して、ジョブの複数インスタンスを同時に実行できます。詳細については、コントロール ファイルによるフローのトリガーを参照してください。
  8. データベース リソースのプール サイズと、ステージ実行時インスタンスの設定値を増加させます。
  9. ‎サーバーを再起動します。
  10. データフローを再度実行し、経過時間、CPU 使用率、メモリ使用率を記録します。
  11. パフォーマンスが低下し始めるまで、データベース リソースのプール サイズとステージ実行時インスタンスの設定値を増加していきます。
  12. ジオコーディング パフォーマンスをテストする場合は、単一国と複数国の入力を使用してこの手順を繰り返します。