【发布时间】:2020-05-12 21:02:43
【问题描述】:
我们在 Db2 上遇到了查询超时属性的问题,当我们在 WebSphere 中运行应用程序时它正在工作,然后我们移到了 Tomcat,这个问题最近被一个很长的查询所困扰,该查询挂了很长时间,直到45 分钟后超时,我们的一些代码如下,自从迁移到 Tomcat 后它们没有改变:
CallableStatement cs = statementFactory.createCallableStatement(getConnection(), source.getSQL(),
statementConfig);
cs.setQueryTimeout(10);
boolean resultSetAvailable = cs.execute();
if (resultSetAvailable) {
resultSet = cs.getResultSet();
} else {
resultSet = CallableStatementParamsUtils.checkForOutResultSet(cs, storedProc);
}
我将超时设置为 10 秒,但根本没有超时,有人知道为什么吗?
难点是Db2驱动不是开源的,无法调试,如何使用Db2解决这个问题?
【问题讨论】:
-
是否设置了属性,是否与此处列出的案例相匹配? ibm.com/support/knowledgecenter/SSEPGG_11.5.0/…
-
IBM db2 jdbc 驱动程序支持跟踪,以允许确定问题,在 DB2 知识中心 ibm.com/support/knowledgecenter/SSEPGG_11.5.0/… 在线清楚地记录。确认您始终使用最新 jdbc4 驱动程序。通过ibm.com/support/pages/db2-jdbc-driver-versions-and-downloads 获取。 其他事物经常发生变化,查询本身、驱动程序版本、Db2 服务器、连接机制等。这是调试而不是编程。
-
@data_henrik 感谢您的回复,您能否指出需要设置哪些属性会影响它的工作,网址列出了很多,很难说
-
setQueryTimeout 上只有一小部分
-
@mao 谢谢,您对驱动程序版本的建议对我很有帮助,我们不在 db2jcc4 上(它只是旧的 db2jcc),升级后,似乎尊重我在方法,我要确定的最后一件事是,它调用取消方法来实际取消来自服务器的查询,我将如何做到这一点,再次,缩小的源代码很难找到取消方法