【问题标题】:JDBC hung query client recoveryJDBC挂起查询客户端恢复
【发布时间】:2012-11-07 12:40:22
【问题描述】:

我正在运行 Microsoft JDBC 驱动程序和 DBCP 的组合,并看到一个查询挂起:

    ...
    at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1654) ~[sqljdbc4-3.0.jar:na]
    at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3694) ~[sqljdbc4-3.0.jar:na]
    at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:5022) ~[sqljdbc4-3.0.jar:na]
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:388) ~[sqljdbc4-3.0.jar:na]
    ...

使用非零查询超时配置驱动程序没有帮助(似乎当它在从套接字读取时挂起,那么它是另一种类型的超时)。

我不想更改应用程序的套接字读取超时。

目前我已更改为具有基于超时的强制连接收集器的 C3P0 池,我不太喜欢它,但除非我找到更好的选择,否则我将不得不使用它。

所以,问题 有谁知道这个问题和基本细节? 您认为最好的处理方法是什么?

谢谢

【问题讨论】:

  • 你能发布挂起的查询吗?我认为 BoneCP 是更好的解决方案
  • @sheldonCooper - 查询是存储过程调用,数据库端的一些嵌套代码中的错误是挂断的原因,我手头没有 SQL。为什么 BoneCP 更好?
  • 使用 BoneCP,您可以拥有我认为其他人无法实现的分区,jolbox.com/index.html?page=http://jolbox.com/benchmarks.html

标签: java sql-server jdbc timeout


【解决方案1】:

如果您可以直接访问 java.sql.Statement,请尝试设置超时。

statement.setQueryTimeout(int seconds);

【讨论】:

  • 和传递“queryTimeout=xxx;”有区别吗给司机?我尝试了第一件事,但没有帮助
  • 我猜是一样的
猜你喜欢
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2014-03-17
  • 2014-07-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2020-01-19
相关资源
最近更新 更多