java - jdbc DB2 queryTimeout 未按预期工作
问题描述
我们在 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 解决这个问题?
解决方案
在这种情况下,使用 jdbc 类型 4 驱动程序似乎有助于解决问题。
请注意,IBM db2 jdbc 驱动程序支持跟踪以确定问题,如此处所述。
在使用 Db2 处理 jdbc 问题时,确保您使用的是最新的 jdbc 驱动程序总是有帮助的,该驱动程序可通过此页面获得。
从评论来看,之前的 jdbc 驱动是 type-2 驱动(它只支持特定配置的查询超时,如 DB2 知识中心的 IBM 文档,注释复制如下)。
此页面上有关 jdbc 中的 queryTimeout 支持的各种 IBM 注释是必不可少的阅读材料,即:
对于 DB2 for i,此方法 (setQueryTimeout) 仅支持秒值 0。
对于 DB2 for z/OS 上用于 JDBC 和 SQLJ 类型 2 连接的 IBM Data Server Driver,仅当 Connection 或 DataSource 属性 queryTimeoutInterruptProcessingMode 设置为 INTERRUPT_PROCESSING_MODE_CLOSE_SOCKET 时才支持 Statement.setQueryTimeout。
对于 Linux、UNIX 和 Windows 系统上 Db2 上用于 JDBC 和 SQLJ 类型 2 连接的 IBM Data Server Driver,仅当 Connection 或 DataSource 属性 queryTimeoutInterruptProcessingMode 设置为 INTERRUPT_PROCESSING_MODE_STATEMENT_CANCEL 时才支持 Statement.setQueryTimeout。
对于 IBM Data Server Driver for JDBC and SQLJ 版本 4.0 及更高版本,以下方法支持 Statement.setQueryTimeout:
Statement.execute Statement.executeUpdate Statement.executeQuery
仅当属性 queryTimeoutInterruptProcessingMode 设置为 INTERRUPT_PROCESSING_MODE_CLOSE_SOCKET (2) 时,Statement.executeBatch 方法才支持 Statement.setQueryTimeout。
推荐阅读
- python - Python 中来自 AWS S3 的 gzip 文件的内容仅返回空字节
- python - pip install via requirements.txt 指定直接 GitHub 私有仓库 + 分支名称错误,退出状态为 128
- vba - 在访问表单中使用查询结果的问题
- c# - 为什么 Graphql Result 提供的 json 详细信息比请求的查询多
- ffmpeg - 如何使用 FFmpeg 将视频升级到固定分辨率?
- docker-compose - Docker Compose 版本错误 - 不工作/开始随机工作
- azure-log-analytics - 如何在 Log Analytics 中同时在 y 轴上显示 val 和 threshold?
- reactjs - 如何在TouchableOpacity标签中嵌入的按钮标签中触发onPress而不触发TouchableOpacity中的onPress
- c++ - 仅使用 C++ 评分程序获得重复出现的奇异响应
- vba - 如何使用 VBA 脚本更改 Microsoft Word 内容控件占位符文本格式?