DB2查询偶尔会出现SQL0925N:由于中断错误而导致处理被取消

时间:2012-07-19 22:47:29

标签: .net sql entity-framework db2

我有一个.Net应用程序,它与DB2数据库交互(实体框架,不确定该细节是否重要)。 Occaisionally 我将在查询中收到以下错误:

ERROR [57014] [IBM][DB2] SQL0952N  Processing was cancelled due to an interrupt.

这是整个错误文本(内部异常)。它没有SQLSTATE。

同样,每次都不会发生这种情况(即使是同一个查询)。例如,我可以一遍又一遍地运行相同的查询,只看到错误发生在5次中的1次。查询的持续时间总是相当一致。

我搜索了一些文档,发现了以下内容: http://www-01.ibm.com/support/docview.wss?uid=swg21450816

只是在尝试进行问题排查时,我按照上述文档中的建议并在我的连接字符串中设置QueryTimeout=0。这没有帮助,我仍然以大约相同的速率得到错误​​。我甚至试过QueryTimeout=500 ......同样的结果。有趣的是,在测试中,当发生此错误时,它发生在大约30秒标记处(文档提到的是默认超时)。我还在以某种方式使用默认超时设置吗?

以下连接字符串:

<add name="myConn" connectionString="(entity framework stuff);provider=IBM.Data.DB2;provider connection string=&quot;Database=myDB;User ID=myId;Server=myServer;QueryTimeout=0&quot;" providerName="System.Data.EntityClient" />
  1. 是否有其他超时设置覆盖或优先于我在连接字符串中指定的设置?
  2. 我是否可能处理超时问题但是还有其他一些问题?我已经读过这可能是锁定的指示...但我可以在测试中重现这一点,因为当时唯一访问数据库的人。可能是别的吗?
  3. 修改

    我刚尝试设置QueryTimeout=1认为这肯定会导致每个查询都超时。这似乎没有任何影响。服用WELL超过一秒钟后,仍有5个查询中的4个仍然完成。我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

我能够通过在我的EF数据上下文中设置CommandTimeout来解决此问题:

using (dataContext = new myDB2Entities())
{
     dataContext.CommandTimeout = 60;
     // DB CODE
}

我现在明白我尝试使用的QueryTimeout设置只是一个时间间隔,并且在每个时间间隔,数据库都会检查应用程序是否仍在等待响应。我没有解决应用程序在默认30秒后发出中断的事实。

答案 1 :(得分:0)

错误是SQL0952N

要解决,我从DB2命令行执行了命令

使用QUERYTIMEOUTINTERVAL 0常见的db2 UPDATE CLI CFG部分

https://www.ibm.com/support/pages/sql0952n-error-returned-long-running-sql-statement