Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)


3.14.1 コネクションプーリング

サーブレット,JSP,EJBなどのJ2EEコンポーネントからのリソースアクセス量に応じて,リソースコネクション(JDBCコネクション,およびリソースアダプタのコネクション)をプーリングする機能です。コネクションをプーリングすることによって,ユーザアプリケーションからのリソース接続要求を高速に処理します。

〈この項の構成〉

(1) 前提条件

コネクションプーリング機能は,リソースの種類,接続方法の組み合わせによって,使用できる場合とできない場合があります。コネクションプーリング機能の使用について次の表に示します。

表3‒52 コネクションプーリング機能の利用可否

リソースの種類

接続方法

利用可否

データベース

DB Connector

データベース上のキュー

DB Connector for Reliable MessagingとReliable Messaging

OpenTP1

TP1 Connector

TP1/Message Queue - Access

SMTPサーバ

メールコンフィグレーション

×

JavaBeansリソース

×

そのほかのリソース

Connector 1.0仕様またはConnector 1.5仕様に準拠したリソースアダプタ

(凡例) ○:使用できる ×:使用できない −:該当しない

(2) コネクションプールの生成および初期化

コネクションプールが生成・初期化されるタイミングは,リソースのスタート処理時です。コネクションプールのウォーミングアップ機能を有効にした場合,この時点でコネクションを生成します。コネクションプールのウォーミングアップ機能を無効にした場合,リソースのスタート時にコネクションは生成されず,最初のコネクション取得要求の発生時にコネクションを生成します。

コネクションプールの生成単位は次のとおりです。

(3) コネクションプールの終了処理

リソースのアンデプロイ時やJ2EEサーバの終了時は,コネクションプール内のすべてのコネクションを削除し,コネクションプール自体も削除します。なお,コネクションプールの終了処理では,コネクションに関するトランザクションなどがすべて決着済みのものとして処理します。

(4) 例外が発生したコネクションの破棄

データベース障害などが発生すると,コネクションプールに格納しているコネクションは使えなくなるため,コネクションプールから速やかに破棄する必要があります。

アプリケーションサーバは,コネクション,またはStatementのようなコネクションからの生成物に対する処理で例外が発生すると,コネクションクローズ時に該当コネクションをコネクションプールから破棄します。ただし,ローカルトランザクションの決着処理が正常終了した場合には,コネクションが正常であると判断するため破棄しません。

コネクションが正常に維持している状態で,コネクションやコネクションからの生成物で例外が発生すると,グローバルトランザクションを使用している場合には,トランザクションの決着処理が正常終了してもアプリケーションサーバはコネクションをコネクションプールに戻さないで破棄します。そのため余分なコネクション生成が発生して性能に影響を与えることがあります。

なお,トランザクションタイムアウト発生時には,トランザクション種別に関係なくコネクションをコネクションプールから破棄します。

(5) コネクションプール利用上の注意事項

コネクションプールを利用する場合の注意事項について説明します。

(6) コネクションプーリングの動作

リソースアダプタのコネクションプーリングの動作を次の表に示します。

表3‒53 コネクションプールの状態と動作

ユーザアプリケーションプログラム処理

コネクションプールの状態

コネクションプールの動作

コネクションの取得要求

プール内に未使用状態のコネクションがある

未使用状態の時間がいちばん長いコネクションが選択され,ユーザアプリケーションプログラムに渡されます。選択されたコネクションは,プール内で使用中状態になります。

プール内に未使用状態のコネクションがなく,プール内のコネクションの総数が「MaxPoolSize」の値未満

新規にコネクションを確立します。確立したコネクションはユーザアプリケーションに渡され,コネクションはプール内で使用中状態となります。

プール内に未使用状態のコネクションがなく,プール内のコネクションの総数が「MaxPoolSize」の値に達している

ユーザアプリケーションプログラムに例外が通知され,コネクションの取得は失敗します。再取得するためには,「Retry Count」と「Retry Interval」を設定します。

プール内に未使用状態のコネクションがあるが,認証情報が一致するコネクションがない

プール内のコネクションの総数によって次の処理が実施されます。

  • プール内のコネクションの数が「MaxPoolSize」の値未満の場合

    新規にコネクションを確立し,ユーザアプリケーションに引き渡されます。

  • プール内のコネクションの数が「MaxPoolSize」の値に達している場合

    使用されていないコネクションのうち,最初にプーリングされたコネクションが破棄されたあと,新しいコネクションが作成されて,ユーザアプリケーションに引き渡されます。

コネクションを解放

解放したコネクションに異常がなく,再利用できる

このコネクションはプール内で未使用状態に戻ります。

解放したコネクションが再利用できない

このコネクションは破棄されます。

コネクションプールのウォーミングアップ機能を使用

リソースアダプタの開始時またはリソースアダプタを開始済みの状態でのサーバ起動時に,「MinPoolSize」の値までコネクションが生成されてプールされます。

コネクションプールのウォーミングアップ機能を使用するためには,「Warmup」を設定します。

コネクション枯渇時のコネクション取得待ち

コネクションプールにコネクションが最大数プールされていて利用できるコネクションがプールにない状態(コネクション枯渇)のときに,コネクションの取得要求を待ち状態にできます。

待ち状態になっているコネクション取得要求は,コネクションが解放されるとすぐにコネクションを取得できます。

コネクション枯渇時のコネクション取得待ちは,「RequestQueueEnable」「RequestQueueTimeout」で設定します。

(凡例) −:該当なし

なお,コネクションプールのウォーミングアップ機能を使用する場合は,次の表に示す注意事項があります。

表3‒54 コネクションプールのウォーミングアップ機能を使用する場合の注意事項

条件

注意事項

コンテナ認証用の認証情報(ユーザ名,パスワードなど)の設定

コンポーネント管理でのサインオンで,複数のユーザ名とパスワードの組み合わせで利用する場合に注意が必要です。コネクションプールはリソースごとに一つであるため,一つのリソースに対して複数のユーザが利用する場合,複数のユーザで一つのコネクションプールを共有することになります。この場合,一人のユーザが,コネクションプールの最大値に設定した数までコネクションを利用できないことがあります。

コンテナ管理でのサインオンの場合は,一つのコネクションプールに対して,コネクション取得要求時に使用する認証情報は常に一つとなるため,特に注意は必要ありません。

「MinPoolSize」の設定

次のような場合,MinPoolSizeに指定した値よりもプールされているコネクションが少なくなることがあります。

  • コネクションスイーパによってコネクション解放処理が実行されたとき

  • cjclearpool(コネクションプール内のコネクション削除)コマンドを実行したとき

  • コネクションに障害が発生したとき

リソースの開始時にMinPoolSize分のコネクションが生成されるため,コネクションプールのウォーミングアップ機能を使用しない場合に比べてサーバの起動またはリソースアダプタの開始に時間が掛かります。

また,このときに「bufSizeに指定した値 × 生成したコネクション数分のメモリ」をJavaヒープ領域に確保します。

MinPoolSizeに必要以上に大きな値を設定してウォーミングアップ機能を使用すると,メモリを確保したときにJavaヒープを使い切り,OutOfMemoryErrorが発生するおそれがあります。

このため,MinPoolSizeの値は,使用するリソースマネジャの最大同時接続数以下に設定してください。

注※ コネクションプールで管理するコネクションは,ウォーミングアップ機能の動作時に使用したコンテナ認証用の認証情報(ユーザ名,パスワードなど)を保持します。