JDBC リソースとは、データベースへの JDBC 接続の名前付きグループのことです。JDBC リソースは、接続プールの作成に使用されるプロパティーを定義します。各 JDBC リソースは、サーバー起動時に JDBC ドライバを使って物理データベースへの接続を確立します。接続のプールが作成されるのは、Web Server の起動後、そのプールに対して最初の接続要求が発行されたときです。
JDBC ベースのアプリケーションまたはリソースは、プールから接続を取り出し、その接続を使用し、その接続が不要になった時点でそれをクローズして接続プールに返します。2 つ以上の JDBC リソースが同じプール定義を指している場合、それらのリソースは実行時に同じ接続プールを使用します。
接続プールを使用すると、次の処理によってアプリケーションのパフォーマンスが改善されます。
接続を事前に作成します。接続の確立の負担が、パフォーマンスに重大な影響を及ぼすコードとは別になります。
接続を再利用します。接続の作成回数が大幅に低減されます。
リソースの量を制御することによって、単一のアプリケーションがいつでも使用できます。
JDBC リソースの作成および編集は、管理コンソールの、構成に対する「Java」タブ ⇒「リソース」サブタブを使って行えます。また、 wadm create-jdbc-resource および set-jdbc-resource-prop コマンドを使用することもできます。詳細については、『Sun Java System Web Server 7.0 管理ガイド』を参照してください。
Web Server の起動時に各定義済みプールがインスタンス化されます。ただし、プールへのアクセスがはじめて発生するまで、接続が作成されることはありません。プールに重い負荷をかける前に、プールを軽く使用しておくべきです。
JDBC リソースの統計が利用可能になるのは、管理コンソール、CLI、および stats.xml を使用する場合だけです。perfdump ではそれらは表示されません。一部の監視データは、管理コンソール経由では利用できず、CLI の wadm get-config-stats および stats.xml 出力経由でしか表示できません。
プールはオンデマンドで作成されます。つまり、プールははじめて使用される時点で作成されます。監視統計は、プールがはじめて使用されるまで表示されません。
次の表に、管理コンソール経由で表示される JDBC リソース統計の例を示します。
表 2–9 JDBC リソース統計
接続 |
32 |
未使用接続 |
0 |
リース接続 |
32 |
平均キュー時間 |
1480.00 |
待機接続 |
40 |
接続タイムアウト |
100 |
管理コンソール経由で JDBC リソースの設定を変更するには、対応する構成で、「Java」タブ ⇒「リソース」サブタブを選択します。JDBC リソースを選択します。「JDBC リソースを編集」ページで設定が利用可能になります。コマンド行インタフェース経由で JDBC リソースを変更するには、wadm set-jdbc-resource-prop を使用します。
この数値は現在の JDBC 接続数を示しており、未使用接続数とビジー接続数の両方を含みます。
チューニング – この設定はチューニング不可能ですが、プールの最新のアクティビティーを知るための良い指標になります。接続数が最小接続数よりも常に大きい場合、その現在の JDBC 接続数に近い値になるように最小接続数を増やすことを検討してください。管理コンソール経由で JDBC リソースの最小接続数を変更するには、「JDBC リソースを編集」ページで「最小接続数」設定を編集します。コマンド行インタフェース経由で JDBC リソースの最小接続数を変更するには、wadm set-jdbc-resource-prop を使って min-connections プロパティーを変更します。
この数値は、プール内の未使用接続の現在数を示します。最小プールサイズを超える未使用接続はすべて、アイドル状態が最大アイドルタイムアウトを超えると閉じられます。未使用接続数はチューニング不可能です。
この数値は、プール内の使用中接続の現在数を示します。
チューニング – リース接続数が最小接続数よりも常に小さい場合、JDBC リソースの最小接続数を減らすことを検討してください。リース接続数が最小接続数よりも常に大きい場合、最小接続数を増やすことを検討してください。リース接続数が JDBC リソースの最大接続数と常に等しくなる場合、最大接続数を増やすことを検討してください。リース接続数の上限は最大接続数になります。
管理コンソール経由で JDBC リソースの最小接続数または最大接続数を変更するには、「JDBC リソースを編集」ページで「最小接続数」または「最大接続数」フィールドを編集します。コマンド行インタフェース経由で JDBC リソースの最小接続数または最大接続数を変更するには、wadm set-jdbc-resource-prop を使って min-connections または max-connections プロパティーを変更します。
この数値は、JDBC プールから接続を受け取るために待機している接続要求の現在数を示します。現在のリース接続数が最大接続数に達すると、接続要求がキューに入れられます。
チューニング – この数値がゼロより常に大きい場合、JDBC リソースの最大接続数を増やすことを検討してください。管理コンソール経由で JDBC リソースの最大接続数を変更するには、「JDBC リソースを編集」ページで「最大接続数」フィールドを編集します。コマンド行インタフェース経由で JDBC リソースの最大接続数を変更するには、wadm set-jdbc-resource-prop を使って max-connections プロパティーを変更します。
一部の JDBC 統計は、wadm get-config-stats コマンド (--node オプションを使用)、stats-xml、および SNMP 経由では利用可能ですが、管理コンソール経由では利用不可能です。
maxConnections – 構成されたプールの最大サイズ。ほかの統計の基準値として使用してください。管理コンソール経由で JDBC リソースの最大接続数を変更するには、「JDBC リソースを編集」ページで「最大接続数」フィールドを編集します。コマンド行インタフェース経由で JDBC リソースの最大接続数を変更するには、wadm set-jdbc-resource-prop を使って max-connections プロパティーを変更します。
peakConnections – プールの履歴に含まれている、同時にリースされた接続の数のうちで、最大のもの。この数値は、プール使用時の上限を知るための良い指標になります。これは、最大接続数の設定によって制限されます。
countTotalLeasedConnections – プールによって接続が提供された回数の合計。プールの総合的なアクティビティーを示します。チューニング不可能です。
countTotalFailedValidationConnections – 接続の検証が有効になっている場合、プールによって接続が無効であると判定された回数を示します。この数値が比較的大きい場合、それは、データベースやネットワークで問題が発生していることを意味している可能性があります。チューニング不可能です。
peakQueued – プールの寿命内の任意の時点で同時にキューに入っていた接続要求の数のうちで、最大のもの。チューニング不可能です。
millisecondsPeakWait – 任意の接続要求が待機キュー内に存在していたミリ秒単位の時間のうちで、最長のもの。この数値が大きい場合、それは、プールのアクティビティーが活発であることを示しています。上限は、JDBC リソース設定の待機タイムアウトになります。
countConnectionIdleTimeouts – 構成された JDBC アイドルタイムアウトを超過したためにプールによって閉じられた未使用接続の数。管理コンソール経由で JDBC リソースのアイドルタイムアウトを変更するには、「JDBC リソースを編集」ページで「アイドルタイムアウト」フィールドを編集します。コマンド行インタフェース経由で JDBC リソースのアイドルタイムアウトを変更するには、wadm set-jdbc-resource-prop を使って idle-timeout プロパティーを変更します。
アプリケーションのデータベースアクティビティーによっては、JDBC リソースの接続プール設定のサイズを変更しなければいけない可能性があります。パフォーマンスに影響を与える JDBC リソースの属性のリストと、その値を設定する際のパフォーマンス上の考慮点を、次に示します。
サーバーインスタンスの寿命内でプールが維持する傾向のあるサイズ。プールの初期サイズでもあります。デフォルトは 8 です。この数値は、予期されるプールの平均サイズにできるだけ近い値にするべきです。高負荷下での使用が予期されるプールの場合、アプリケーションの寿命内での接続の作成やプールのサイズ変更が最小限に抑えられるよう、大きな数値を使用してください。小さい負荷が予期されるプールの場合、リソース消費が最小限に抑えられるよう、小さい数値を使用してください。
プールが任意の時点で持つことのできる接続の最大数。デフォルトは 32 です。プールまたはアプリケーションが持つことのできる接続リソースの量に制限を加える場合に、この設定を使用します。また、この制限は、過剰なリソース消費によるアプリケーションエラーを回避するためにも役立ちます。
未使用状態の接続がプール内にとどまることが保証される、秒単位の最大時間。このアイドルタイムアウトが経過すると、接続が自動的に閉じられます。必要であれば、閉じられた接続の代替として、最小接続数までの接続が新たに作成されます。この設定は、データベースサーバー側で適用される接続タイムアウトを制御するわけではありません。デフォルト値は 60 秒です。
この属性を –1 に設定すると、接続が閉じられなくなります。この設定は、高い要求が継続的に見込まれるようなプールに適しています。それ以外の場合は、使用不可能な接続がプール内に蓄積されないよう、このタイムアウトがデータベースサーバー側のタイムアウトよりも短くなるようにしてください (特定ベンダーのデータベース上でそのようなタイムアウトが構成されている場合)。
タイムアウトの発生までに要求がキュー内で接続を待機する時間 (秒)。このタイムアウトが経過すると、ユーザーにエラーが表示されます。デフォルトは 60 です。
この属性を 0 に設定すると、接続の要求が無制限に待機するようになります。また、この設定ではプールが接続タイマーを考慮する必要がなくなるため、パフォーマンスが改善する可能性もあります。
プール内の接続の健全性を判定する目的でプールによって使用される方法。デフォルトはオフです。
ある検証方法が使用される場合、プールは、アプリケーションに接続をリースする前に、その接続の妥当性検査を実行します。
効果やパフォーマンスへの影響は、選択する方法ごとに異なります。
検証方法が table の場合に検証に使用されるユーザー定義テーブル。デフォルトは test です。
この方法を使用する場合、使用されるテーブルは検証専用にするべきであり、かつテーブル内の行数は最小限に抑えるべきです。
無効な接続が見つかった場合に、プール内のすべての接続を再作成するのか、あるいは無効な接続のみを再作成するのかを示します。ユーザーが接続検証方法を選択した場合にのみ適用されます。デフォルトは無効です。
これを有効にした場合、すべての再作成が一度に行われ、接続を要求しているスレッドは多大な影響を受けます。これを無効にした場合、接続の再作成の負荷が、各接続を要求しているスレッド間で分散されます。
プール内のデータベース接続のトランザクション遮断レベルを指定します。
デフォルトでは、接続のデフォルトの遮断レベルがそのまま使用されます。これを任意の値に設定すると、メソッド呼び出しによるパフォーマンス低下が若干発生します。
トランザクション遮断レベルが指定された場合にのみ適用されます。デフォルトは無効です。
この設定を無効のままにすると、接続の作成時にのみ、遮断レベルが設定されます。有効にすると、接続がアプリケーションにリースされるたびに、レベルが設定されます。ほとんどの場合、この設定は無効のままにします。