![[z/OS]](../images/ngzos.gif)
DB2 で使用する場合の JDBC 調整のヒント
WebSphere® Application Server は、JDBC 準備済みステートメント・キャッシングをパフォーマンス拡張機能として使用します。 この機能を DB2® for z/OS® とともに使用している場合は、使用可能な DB2 JDBC カーソル・オブジェクトの数に影響を及ぼす可能性があることに注意してください。
DB2 for OS/390 の JDBC カーソル・オブジェクトに対する準備済みステートメント・キャッシングの影響
PreparedStatement オブジェクトを 実行して ResultSet オブジェクトを取得する場合、DB2 JDBC カーソル・オブジェクトは、 対応する DB2 準備済みステートメントがクローズされるまで、それにバインドされます。これは、DB2 のConnection オブジェクトが WebSphere Application Server 接続プールから解放された場合に起こります。アプリケーションの観点から、結果セット、準備済みステートメント、および接続が、 それぞれ順番にクローズされます。 ただし、基礎となる DB2 Connection は WebSphere Application Server によってプールされ、基礎となる DB2 PreparedStatement は、アプリケーション・サーバーによってキャッシュされます。 この PreparedStatement オブジェクト上に作成される各 ResultSet と関連する、基礎となる DB2 JDBC の各カーソル・オブジェクトはまだ解放されません。
キャッシュの各 PreparedStatement オブジェクトは、 これに関連付けられた結果セットを 1 つ以上持つことができます。結果セットがオープンされ、 接続をクローズしても結果セットがクローズされない場合、その結果セットはまだ キャッシュの準備済みステートメントに関連付けられています。各結果セットには、 接続された固有の JDBC カーソルがあります。このカーソルはステートメントによって保持され、 準備済みステートメントが WebSphere Application Server キャッシュからクリアされるまで解放されません。
java.sql.SQLException: DB2SQLJJDBCProfile Error: No more JDBC Cursors without hold
この問題を回避できるように、以下の WebSphere Application Server の調整方法をお勧めします。
- DB2 for OS/390® のデータ・ソース定義で、statement cache size の設定を下げます。この値をゼロ (0) に設定すると、ステートメント・キャッシングが除去されますが、 パフォーマンスに顕著に影響します。
- DB2 for OS/390 のデータ・ソース定義で、minConnections 接続プール設定を下げます。
- DB2 for OS/390 のデータ・ソース定義で、Aged Timeout 接続プール設定を下げます。ただし、これをゼロ (0) に設定することはお勧めしません。 これは経過時間タイムアウト機能を使用不可にするためです。