![[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 对象可具有与它关联的一个或多个结果集。如果结果集是打开的且未关闭,即使您关闭连接,此结果集仍然与高速缓存中的预编译语句关联。每个结果集都附加了唯一的 JDBC 游标。此游标由该语句保留,并且直到从 WebSphere Application Server 高速缓存清除预编译语句才将其释放。
如果高速缓存语句比游标多,那么最后执行 PreparedStatement 对象会导致以下异常:
java.sql.SQLException: DB2SQLJJDBCProfile Error: No more JDBC Cursors without hold
帮助避免此问题的一些 WebSphere Application Server 调整建议包括:
- 减小 DB2 for OS/390® JDBC 数据源定义上的语句高速缓存大小设置。将此值设置为零 (0) 可消除语句高速缓存,但会导致值得注意的性能影响。
- 减小 DB2 for OS/390 JDBC 数据源定义上的 minConnections 连接池设置。
- 减小 DB2 for OS/390 JDBC 数据源定义上的时效超时连接池设置。然而,建议不要将此值设置为零 (0),因为这会禁用寿命超时功能。