5.7 UCPのベスト・プラクティス

ユニバーサル接続プールには、接続リークを分析し、プール・プロパティをチューニングしてその操作を最適化するツールおよびAPIの広範なコレクションがあります。この項では、これらのツールおよびAPIについて説明します。

「ユニバーサル接続プールのすべての接続が使用中です」例外は、ある時点のプール内の接続の不足を示します。これは、プールがアプリケーションの接続流用リクエストを満たすことができないことを意味します。これには次の理由が考えられます。

  • アプリケーションが接続を流用し、使用しないで長時間保持し、プールに戻さない場合。接続リークは、アプリケーションが接続を流用して使用しないで保持し、長時間経過後に最終的にプールに戻す場合にも発生する可能性があります。これらは、従来の接続リークの使用例です。長時間または無限に続く非生産的な接続流用を排除する必要があります。
  • プールに、接続流用リクエストのフロー全体を処理するための十分な容量がない場合。この場合は、プールの接続供給が想定されるジョブを実行するのに十分でないことによって、例外が発生します。このような場合は、プール容量を増やす必要があります。

UCPをデバッグおよびチューニングする前に知っておく必要がある有用なツールおよびAPIのリストを次に示します。

  • 中止接続タイムアウト(ACT): このAPIでは、流用されているが未使用の接続のタイムアウトを設定できます。
  • TTL接続タイムアウト(TTL): このAPIでも、流用されているが未使用の接続のタイムアウトを設定できます。ただし、流用された接続のうち、関連する進行中のプロセスでビジー状態であるものに関する情報も提供します。また、非常に長いプロセスの場合は、これらのビジー接続をプールに戻してプールの容量をリストアすることもできます。
  • 接続獲得メカニズム: これは、UCPが常に特定の数の接続を流用に使用できるようにする特別なAPIとなり、「ユニバーサル接続プールのすべての接続が使用中です」例外の回避に役立ちます。
  • 接続待機タイムアウト(CWT): 「ユニバーサル接続プールのすべての接続が使用中です」例外を回避するためにUCPをチューニングする場合に重要となるプロパティです。アプリケーションがプールから接続を流用することを試みたときに使用可能な接続がない場合、UCPは、使用可能な接続が出現するまで、CWTの値と等しい時間待機します。デフォルトでは、CWTは3秒に設定されています。多くのアプリケーションでは、このタイムアウトを増やして、使用可能な接続が出現するまで、「ユニバーサル接続プールのすべての接続が使用中です」例外の発生なしにプールが待機できる時間を延長できます。
  • 最大プール・サイズ(MaxPoolSize): このプロパティはプール容量に影響し、「ユニバーサル接続プールのすべての接続が使用中です」例外の回避に役立ちます。プール・サイズは小さく(通常はデータベース・サーバー上のコア数に小さい数を乗算)することをお薦めします。MaxPoolSizeを非常に大きくするよりも、CWTを増やす方が適切です。
  • MaxPoolSizeと組み合せた非アクティブ接続タイムアウト(ICT): ICTは、ICTの値で指定された一定期間流用されなかった使用可能な接続をUCPが自動的にクローズできるようにするタイムアウト・プロパティです。これにより、UCPは、プールのワーキング・セットが大きすぎて一定のスループットを実行できない場合に接続を回避できます。プールがプールのワーキング・セットで必要な接続数を自動チューニングする場合は、MaxPoolSizeパラメータを大きい値に設定し、それに応じてICTを設定できます。
  • プール・サイズの自動チューナ: このツールを使用すると、スループット向上のためにUCPによってプール・サイズが自動的にチューニングされるようにできます。
  • プール統計メトリック: これは、使用可能な接続の数、流用された接続の数、平均接続待機時間(ACWT)など、プールのアクティビティおよび統計の特定に役立つ一連の統計です。ACWTは、プール・チューニングのためにCWTプロパティの適切な値の決定に役立ちます。ACWTが大きい場合は、UCPがその容量を使用しすぎていることを示します。
  • プール・ロギング: UCPには、広範で柔軟なロギング・システムがあります。ロギングを使用すると、接続のオープン、接続のクローズ、接続の流用、および返却リクエストと流用リクエストの待機時間に関連するイベントを判別できます。