ここでは,J2EEサーバでコネクションプーリングを使用する利点と,コネクションプーリングに関連して使用できる機能について説明します。
また,Cosminexus JPAプロバイダでは,DB Connectorのコネクションを取得します。Cosminexus JPAプロバイダが使用するコネクション数の見積もりについては,マニュアル「Cosminexus アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「6.2.4 DB Connectorのコネクション数の見積もり」を参照してください。
データベースなどのEISとのコネクションの確立は,負荷が高くなる処理です。コネクションプーリングを使用することで,負荷を軽くできます。コネクションプーリングは,J2EEサーバによって一度取得,生成したコネクションをプールしておき,それを再利用することで処理性能の向上を図る機能です。データベースなどにアクセスするたびにコネクションを再取得する場合に比べて,性能劣化を防ぐ効果があります。
なお,EISとの接続方法によって,使用できる機能が異なります。詳細は,マニュアル「Cosminexus アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「3.14.1 コネクションプーリング」を参照してください。
なお,デフォルトの設定では,コネクションプーリングは有効になっています。
コネクションプーリングで使用できる機能と設定時の指針について示します。
コネクションプーリングでは,次の機能を使用できます。
注※1 この機能を使用する場合,コネクションの検査にタイムアウトを設定することもできます。
注※2 これらの機能は,デフォルトの設定では無効になっています。必要に応じて使用してください。
注※3 この機能はデータベースがOracle10g,またはOracle11gの場合に使用できます。
コネクションプーリングを設定する場合は,プールするコネクションの最小値と最大値を設定します。無制限にした場合はコネクションが無制限に確立されます。
最小値および最大値は,定常状態で発生するデータベースなどのEISへの同時アクセス数,トランザクション数,業務の同時実行数などを参考にして決定してください。
プール内のコネクションに障害が発生していないかどうかをコネクション取得時または定期的にチェックして,障害が発生したコネクションをプールから削除します(コネクション障害検知)。コネクション取得時に障害が発生しているコネクションを取得してしまうことを防ぎ,接続に失敗する可能性を低くできます。この機能は,DB Connectorを使用してデータベースにアクセスするためのコネクションに対して有効です。なお,SQL Serverを使用する場合,DB ConnectorのselectMethodプロパティにdirectを指定したときには,この機能は使用できません。
コネクション障害検知を実行するタイミングの使い分けの指針は次のとおりです。業務の種類に応じて使い分けてください。
表8-23 コネクション障害検知を実行するタイミングの使い分けの指針
業務の種類 | タイミング |
---|---|
| コネクション取得時に障害検知を実行する設定をお勧めします。 コネクション取得時に掛かる処理時間は,コネクション障害検知を実行しない場合に比べて多く掛かりますが,障害が発生しているコネクションを取得する可能性が低くなります。 |
| 定期的に障害検知を実行する設定をお勧めします。チェック間隔をある程度長くすることで,コネクション障害検知処理のために性能が劣化することを防げます。ただし,障害が発生しているコネクションを取得してしまうおそれがあります。 |
また,コネクション障害検知を実行する場合,コネクション障害検知の実行にタイムアウトを設定できます。サーバ障害やネットワーク障害が発生してリソースからの応答が返らない場合,コネクション障害検知の実行に対しても応答が返らなくなることがあります。タイムアウトを設定しておくことで,リソースからの応答が返らない場合も,コネクション障害検知処理を終了して,処理を継続できます。なお,この場合は,コネクションに障害が発生していると判断されます。
コネクションの取得に失敗したときに,ユーザプログラムでリトライする必要がなくなります。業務処理のレスポンスが下がっても,障害発生による業務停止を防ぎたい場合に設定してください。
リトライ回数とリトライ間隔を設定する場合の指針について次に示します。
一定時間使用しなかったコネクションをスイーパによってプールから自動削除します。コネクションを未使用のままプーリングすると問題が発生する場合に設定します。リソースアダプタ単位に設定できます。
J2EEサーバの起動時またはリソースアダプタのスタート時にコネクションを最小値まであらかじめ取得してプールしておく機能です。コネクションプールの使用を開始した直後の,アプリケーションからのコネクション要求のレスポンスを向上できます。ただし,J2EEサーバ起動またはリソースアダプタのスタート時の処理時間が掛かります。
プールしているコネクションをすべて使い切っている状態でコネクション取得要求があった場合に,コネクション取得要求を待ち状態にする機能です。
使用中のコネクションが解放されるか,コネクションが破棄されてコネクション最大数よりも少なくなった場合に,すぐにコネクション取得要求を再開できます。また,待ち時間も設定できるので,一定時間を経過してコネクションを取得できなかった場合はエラーにできます。
コネクションプール内に不要なコネクションがある場合に,コネクション数を段階的に減らす機能です(コネクション数調節機能)。
一定間隔でコネクションプールの数をチェックします。チェック直前までの間の最大同時実行コネクション数を基準として,プール内にそれ以上の数のコネクションがある場合は,多い分のコネクションを削除します。これによって,プール内のコネクションは実際の稼働実績に適した数になるので,コネクション生成コストの削減や,リソース資源の節約ができます。
また,コネクションの削除処理にタイムアウトを設定できます。タイムアウトには,コネクション管理スレッドを使用します。なお,コネクション管理スレッドは,コネクション障害検知のタイムアウトでも使用されます。
データベースをクラスタ構成にしている場合,コネクションプールもクラスタ構成にして,クラスタ構成になっているデータベースノードごとにコネクションプールを保持できます(コネクションプールのクラスタ化機能)。データベースノードとコネクションプールは1:1で対応しています。データベースノードに障害が発生するとそれに対応するコネクションプールも一時停止し,使用できなくなります。これによって,障害が発生したコネクションを使用するおそれがなくなるため,システムの可用性が向上します。