コネクションプーリング機能とは、アプリケーション・サーバ起動時などに、あらかじめデータベースとのコネクション(接続)をプールしておき、再利用する技術です。
通常データベースからSQL文を使ってデータを抽出する際には、まずデータベースとのコネクション(接続)を確立し、その後SQL文を発行し、データを抽出、最後にデータベースをクローズします。しかしデータベースのコネクション(接続)の確立やクローズはとても重い処理です。リクエストがあるたびにこのような手順を踏むことは非効率であり、ますますデータベースとのやりとりがボトルネックになってしまう可能性があります。それを回避するため、コネクションプーリングを使用します。
アプリケーション・サーバがWLS61で、データベースがOracleである場合、WLS61にOracle接続用のJDBCドライバを組み込み、管理コンソールからコネクションプーリングの設定をすることで、WLS61起動時にOracleとの接続を確立し、それをプールして再利用することができます。SQLリクエストがくると、すでに用意された接続を使い、即座にSQL文をOracleデータベースに送ることができます。このためデータベースとの処理を高速化できます。
接続プールでは、一般に以下の設定(一部のみ記述)が可能です。ここではWLS61の場合について記載しますが、詳細は各アプリケーション・サーバのドキュメントを参照ください。
項目 | 内容 |
---|---|
[初期容量] | プールの初期接続数 |
[最大容量] | プールの最大接続数 |
[増加容量] | プールの容量を増やします。プールの[最大容量]まで必要に応じて[増加容量]ずつ増加されます。デフォルトは1です |
[縮小可] | 接続プール増加後、初期の接続数に戻すかどうかの設定。このプロパティがtrueの場合、[縮小間隔]を設定します。設定しない場合は、デフォルトで15分になります。[縮小可]は下位互換のため、デフォルトでfalseに設定されます |
[縮小間隔] | 接続プール増加後、初期接続数に戻すまでの分数。このプロパティは、[縮小可]がtrueの場合に使用します。デフォルト値は15分で、最小値は1分です |
上記設定項目を見て分かるように、接続プールは必要に応じて[初期容量]から[最大容量]の範囲内で接続を増減しつつ、接続リクエストの要求にこたえます。
パフォーマンスに関しては、以下の2点について注意しましょう。
(1)運用時は、初期接続数[初期容量]=最大接続数[最大容量]とする
あらかじめ負荷テストを行い、高負荷時にも対応可能な最大接続数を探っておきましょう。プール内の接続を動的に増やしたり、またその逆に減らしたりすることは高負荷な処理なので、サーバのオーバーヘッドを引き起こす可能性があります。運用時には、初期接続数を最大接続数に合わせて、
初期接続数[初期容量]=最大接続数[最大容量]
とすることをお勧めします。WLS61起動時に多少時間は要しますが、実行時の接続の生成/消滅の際に生じるオーバーヘッドを減らすことが可能です。
(2)スレッド数と、最大接続数[最大容量]との関係
あるスレッドがある1つの接続を使うと仮定すると、負荷の高い瞬間に、スレッドが最大接続数の接続すべてを使用すると想定できます。もし「スレッド数 < 最大接続数」であれば、スレッドが必要な接続を使用しても、いくつかの接続が使用されないまま余ることになり、せっかくプールしてある接続が無駄になってしまいます。しかしながら、前述のスレッド数に多少余裕を持たせた設定の方が適切に思えても、システム環境やアプリケーションの作りによって、必ずしもそうならない場合もあります。
上記の(1)も考慮すると、運用時の一般的な設定の目安は、
初期接続数[初期容量]=最大接続数[最大容量]=スレッド数±α
とすることが推奨されています。別途負荷テストを行い、システムに最適な設定値を見つけてください。
なお、トランザクションが完結するまで接続はホールドされるので、この点も十分考慮して設計する必要があります。
Copyright © ITmedia, Inc. All Rights Reserved.