4.3 接続プールのサイズに関する実際のパフォーマンス上の考慮事項
Real-World Performanceグループが調査するオンライン・トランザクション処理(OLTP)のパフォーマンス問題のほとんどは、アプリケーションで使用される接続方法に関連します。このため、健全な接続方法を設計することはシステム・パフォーマンスにおいて重要で、特に、規模を拡大して増加する要件を満たす必要のある企業環境では重要です。
ほとんどのアプリケーションは、データベースで開いたままにする最小数の接続とデータベースに行うことができる最大数の接続を構成したデータベースへの動的プールの接続を使用します。アプリケーションでデータベースへの接続を必要とする場合、プールから要求します。使用できる接続がないと、接続の最大数に達していない場合は新しい接続が作成されます。接続が指定された期間使用されていない場合、使用できる接続の最小数を超えると接続が閉じられます。
この構成は、アプリケーションが必要とするアクティブな接続数を維持する場合のみ、システム・リソースを節約します。実際は、この構成では、接続ストームおよびデータベース・システムのCPUオーバーサブスクリプションが発生する可能性があり、システムがすぐに不安定になります。データベース接続が必要なアプリケーション・サーバーの多くのアクティビティが存在する場合、接続ストームが発生する可能性があります。すべてのリクエストを満たすデータベースへの十分な接続がない場合、アプリケーション・サーバーは新しい接続を開きます。データベースの新しい接続の作成は、リソース消費型アクティビティです。多くの接続が短期間に行われる場合、データベース・システムのCPUリソースが過負荷になる可能性があります。
そのため、接続プールを作成する場合は、すべてのプールからそのデータベースへの接続の合計数が、システムで使用可能なCPUコア数に基づいている必要があります。CPUコア当たりの接続数は5つまでにすることをお薦めしています。理想的な数値は、アプリケーションおよびシステム・ハードウェアによって異なります。ただし、その値は、その範囲内のどこかです。Real-World Performanceグループでは、次のようなプールを作成することをお薦めしています:
- 使用中の接続の実際の最小数に近い最小サイズである
- 最大サイズが大きすぎず、CPUコア当たりの接続数が5つというガイドラインに従っている
- 接続ストームを回避できるように、最大値と最小値との差を大きくしすぎない
たとえば、データベース・サーバーにCPUが2つあり、CPUごとのコア数が12個である場合は、24個のコアを使用可能であり、データベースへの接続の数が、どの時点においても、120未満である必要があります。システムに複数のデータベースがある場合、この数値は、システムに接続するすべてのアプリケーションとすべてのデータベースについての累積値となります。2つのアプリケーション・サーバーがある場合、接続の最大数(たとえば、ここでは120)を分割する必要があります。そのシステム上で実行されているデータベースが2つある場合は、接続の最大数をそれらで分割する必要があります。