最適なスレッド数

マルチスレッドでのバックグラウンド・プロセスの実行は、ほとんどの場合、シングル・スレッドでの実行よりも高速です。その秘訣は、プロセスごとに最適なスレッド数を判断することにあります。

注意: 経験則から、使用可能なアプリケーション・サーバーのCPUの100 MHzごとに1スレッドを指定することをお薦めします。たとえば、アプリケーション・サーバーに使用可能な450 MHzのプロセッサが4つある場合は、18スレッド((450 * 4) / 100 = 18)でテストを開始できます。

各プロセスは様々でデータベースのデータに依存するため、これは大体の経験則です。また、ハードウェアの構成(つまり、プロセッサの数、ディスク・ドライブの速度、データベース・サーバーとアプリケーション・サーバー間でのネットワークの速度)は、最適なスレッド数に影響を与えます。各バックグラウンド・プロセスの最適なスレッド数を決定するには、次のガイドラインに従ってください。

  • 経験則(前述)で説明したスレッド数を使用してバックグラウンド・プロセスを実行します。この実行時に、アプリケーション・サーバー、データベース・サーバーおよびネットワーク・トラフィックの使用状況のパーセントをモニターします。

  • 使用しているデータベース・サーバーで100%の使用状況を検出したが、アプリケーション・サーバーでは検出されない場合は、次のいずれかが発生している可能性があります。

    • 処理時に実行中のSQL文に問題がある場合があります。問題のSQLを識別するには、データベース・トレースを取得する必要があります。

    • コミット頻度が高すぎる可能性もあります。コミット頻度は、すべてのバックグラウンド・プロセスに指定されるパラメータです。大きすぎると、データベースの保留キューがスワッピングを開始する可能性があります。このパラメータの詳細は、「バックグラウンド・プロセスに指定するパラメータ」を参照してください。

  • 使用しているアプリケーション・サーバーで100%の使用状況を検出したが、データベース・サーバーでは検出されないのは通常です。これが通常なのは、一般的にすべてのプロセスがCPUバウンドであり、IOバウンドではないためです。この時点で、アプリケーション・サーバーの使用状況が100%を少し下回るまでスレッド数を減らす必要があります。これが、このバックグラウンド・プロセスで必要な最適なスレッド数になります。

  • アプリケーション・サーバーが100%の使用状況に達していないことを検出した場合は、アプリケーション・サーバーの使用状況が100%を少し下回るまでスレッドの数を増加してください。アプリケーション・サーバーは、データベース・サーバーが100%の使用状況に達する前に、100%の使用状況に達している必要があることに注意してください。これが立証されない場合は、SQL文になんらかの問題がある可能性があるため、SQLトレースを取得して原因を確認する必要があります。

同じような結果を実現する別の方法には、少ない数のスレッドから開始してスループットを最大化するまでスレッド数を増やす方法があります。スループットの定義はプロセスごとに異なりますが、バッチ実行ツリーで処理されるレコードの単なる件数として一般化できます。たとえば、Oracle Utilities Customer Care and Billingの請求バックグラウンド・プロセスでのスループットは、1分当たりに処理される請求の数です。この方法を使用する場合は、スループット対スレッド数の曲線をグラフ化することをお薦めします。このグラフでは、最初に急な曲線が表示されますが、スレッド数を増やすと平板化されます。最終的に、スレッドの追加によって、スループットは低下します。このタイプの分析を通じて、特定のプロセスに対して実行する最適なスレッド数を判断できます。