3.14.4 ステートメントプーリング
DB Connectorを使用した場合,JDBCドライバから取得するjava.sql.PreparedStatementとjava.sql.CallableStatementのオブジェクトを保持して再利用を行うプーリング機能を使用できます。ステートメントプーリング機能によって,PreparedStatementとCallableStatementを使用した場合のパフォーマンス向上が図れます。なお,PreparedStatementとCallableStatementのプールサイズは,DB Connectorの設定で指定します。ステートメントプーリングを使用する際のプールサイズ設定の指針については,マニュアル「アプリケーションサーバ システム設計ガイド」の「8.5.2 ステートメントプーリングを使用する」を参照してください。また,DB Connectorのプロパティ定義については,マニュアル「アプリケーションサーバ アプリケーション設定操作ガイド」の「4.2.2 DB Connectorのプロパティ定義」を参照してください。
ステートメントプーリング機能では,ステートメントを再利用する際にステートメントを初期化します。初期化する内容はJ2EEサーバのプロパティをカスタマイズして設定します。ステートメントプーリング機能の設定については,「3.14.10 実行環境での設定」を参照してください。
ステートメントプーリング機能を利用するには,コネクションプーリング機能を使用する必要があります。また,トランザクションサポートレベルにグローバルトランザクションを指定した場合,HiRDBのバージョンによっては利用できないことがあります。
- 注意事項
-
HiRDB Type4 JDBC Driverを使用する場合,PreparedStatement,CallableStatementのプールサイズに制限があります。指定できるプールサイズについては,マニュアル「アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「4.1.10 DB Connectorに設定する<config-property>タグに指定できるプロパティ」を参照してください。
なお,ステートメントプーリング機能を使用しない場合は,PreparedStatement,およびCallableStatementのプールサイズを両方とも0にしてください。
(1) 前提条件
トランザクションサポートレベル,コネクションプーリング使用の有無,使用するデータベースの種類との対応による,ステートメントプーリング利用について次の表に示します。
トランザクションサポートレベル |
コネクションプーリングを使用する |
コネクションプーリングを使用しない |
|||
---|---|---|---|---|---|
HiRDB※1 |
Oracle |
SQL Server |
XDM/RD E2 |
HiRDB/Oracle/SQL Server |
|
トランザクションなし(NoTransaction) |
○ |
○ |
○ |
○ |
× |
ローカルトランザクション(LocalTransaction) |
○ |
○ |
○ |
○ |
× |
グローバルトランザクション(XATransaction) |
○※2 |
○ |
× |
× |
× |
なお,XDM/RD E2を使用する場合はXDM/RD E2 11-03以降のバージョンとHiRDB Type4 JDBC Driver 08-02以降を使用するときにだけステートメントプーリング機能を使用できます。ステートメントプーリング機能の設定については,「3.14.10 実行環境での設定」を参照してください。
(2) ステートメントプーリングの動作
リソースアダプタのコンフィグレーションプロパティで設定するステートメントプーリングの動作について説明します。
ステートメントプーリング機能の動作を,次の表に示します。
ユーザアプリケーションプログラム処理 |
ステートメントプールの状態 |
ステートメントプールの動作 |
---|---|---|
PreparedStatement,CallableStatementの生成を要求 |
プール内に未使用状態のPreparedStatement,CallableStatementがある |
プール内で未使用状態のPreparedStatement,CallableStatementの一つが選択され,ユーザアプリケーションプログラムに渡されます。選択されたPreparedStatement,CallableStatementは,プール内で使用中状態になります。 |
プール内に未使用状態のPreparedStatement,CallableStatementがなく,プール内のPreparedStatement,CallableStatementの総数が「PreparedStatementPoolSize」,「CallableStatementPoolSize」の値に満たない |
新規にPreparedStatement,CallableStatementを生成します。生成したPreparedStatement,CallableStatementはユーザアプリケーションに渡され,PreparedStatement,CallableStatementはプール内で使用中状態となります。 |
|
プール内に未使用状態のPreparedStatement,CallableStatementがなく,プール内のPreparedStatement,CallableStatementの総数が「PreparedStatementPoolSize」,「CallableStatementPoolSize」の値以上 |
タイムスタンプが最も古い※PreparedStatement,CallableStatementをプールから削除したあと,新規にPreparedStatement,CallableStatementを生成します。生成したPreparedStatement,CallableStatementはユーザアプリケーションに渡され,PreparedStatement,CallableStatementはプール内で使用中状態となります。 |
|
PreparedStatement,CallableStatementを解放 |
− |
PreparedStatement,CallableStatementはプール内で未使用状態に戻ります。 |
(3) ステートメントプーリング機能を使用する場合の注意事項
ステートメントプーリング機能を使用する場合の注意事項を次の表に示します。
条件 |
注意事項 |
---|---|
− |
|
− |
|
OracleまたはSQL Serverに接続 |
|
- 注※
-
コネクションの障害検知機能を使用する場合には,CallableStatementPoolSizeを最大ステートメント数未満に設定してください。
コネクションの障害検知機能を使用すると,プーリングされているCallableStatementの数が最大ステートメント数に達したとき,コネクションの障害検知が実行されます。このとき,CallableStatementPoolSize=<最大ステートメント数>と設定していると,JDBCドライバの一つのコネクションで利用できるリソース数の最大値を超えるため,例外が発生します。例外が発生すると障害が発生したと判断されるので,そのコネクションはコネクションプールから削除され,同時にステートメントプールも破棄されます。つまり,ステートメントプーリング機能を使用する意味がなくなってしまいます。