java - 线程在 JDBC Teradata 请求上永久挂起

标签 java jdbc teradata

我正在使用 JDBC 查询 Teradata 服务器。最多有 100 个并发请求,每个请求都使用一个新连接,并在最后关闭它。经过几个小时的工作后,某些执行请求的线程会无限期地卡住。最终需要重新启动系统。 通过检查调用堆栈,我发现线程处于套接字读取状态,并且在准备语句关闭连接时发生:

案例1:

java.lang.Thread.State: RUNNABLE
               at java.net.SocketInputStream.socketRead0(Native Method)
               at java.net.SocketInputStream.read(SocketInputStream.java:129)
               at com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.read(TDNetworkIOIF.java:649)
               at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:818)
               at com.teradata.jdbc.jdbc_4.statemachine.StatementReceiveState.action(StatementReceiveState.java:125)
               at com.teradata.jdbc.jdbc_4.statemachine.StatementController.runBody(StatementController.java:112)
               at com.teradata.jdbc.jdbc_4.statemachine.StatementController.run(StatementController.java:103)
               at com.teradata.jdbc.jdbc_4.Statement.executeStatement(Statement.java:340)
               at com.teradata.jdbc.jdbc_4.Statement.prepareRequest(Statement.java:507)
               - locked <0x00002aab4f787518> (a com.teradata.jdbc.jdbc_4.PreparedStatement)
               at com.teradata.jdbc.jdbc_4.PreparedStatement.<init>(PreparedStatement.java:66)
               at com.teradata.jdbc.jdbc_4.TDSession.createPreparedStatement(TDSession.java:723)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalPreparedStatement.<init>(TeraLocalPreparedStatement.java:89)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalConnection.prepareStatement(TeraLocalConnection.java:333)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalConnection.prepareStatement(TeraLocalConnection.java:152)
...

案例2:

java.lang.Thread.State: RUNNABLE
               at java.net.SocketInputStream.socketRead0(Native Method)
               at java.net.SocketInputStream.read(SocketInputStream.java:129)
               at com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.read(TDNetworkIOIF.java:649)
               at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:818)
               at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:794)
               at com.teradata.jdbc.jdbc.GenericLogOffRspState.action(GenericLogOffRspState.java:66)
               at com.teradata.jdbc.jdbc.GenericLogoffController.run(GenericLogoffController.java:43)
               - locked <..> (a com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF)
               at com.teradata.jdbc.jdbc_4.TDSession.close(TDSession.java:476)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalConnection.close(TeraLocalConnection.java:259)
...

我使用的是 JDBC Teradata 驱动程序版本 13.10.00.10。

知道为什么会发生这种情况吗? 这个问题对我们来说非常痛苦,我们将不胜感激任何帮助。

谢谢!

最佳答案

您是否尝试过升级到 JDBC 驱动程序的最新补丁版本? 13.10.00.18 于 2011 年 4 月 12 日发布。版本 13.10.00.15 包含一个补丁,用于纠正多线程并发登录尝试抛出 GSSException:MIC 计算期间错误的问题。

如果这不能解决问题,并且您的客户/公司是 Teradata 客户,我建议您向 Teradata 全局支持中心提出事件。

关于java - 线程在 JDBC Teradata 请求上永久挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6017422/

相关文章:

java - 在java中使用索引位置的单词后的下一个数字

java - 为什么我的 Tomcat 服务器会重新启动,什么是 org.apache.catalina.core.AprLifecycleListener?

java - 如何获取firebase中child的child列表?

使用 Case (Teradata) 的 SQL 窗口

sql - 从列中删除替换字符�

java - 为什么我的 JLabel 没有显示?

java - 在 Java 1.7.0 下运行的 SQL-Server (MSSQL-JDBC 3.0) 中的日期列检索为过去 2 天

java - 使用存储过程的数据库中的对象锁定问题

java - [警告][插件]插件 jdbc- River,无法调用自定义 onModule 方法

sql - 查找每个策略每月的最后更新记录(另一个字段)