我有一个.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="Database=myDB;User ID=myId;Server=myServer;QueryTimeout=0"" providerName="System.Data.EntityClient" />
修改
我刚尝试设置QueryTimeout=1
认为这肯定会导致每个查询都超时。这似乎没有任何影响。服用WELL超过一秒钟后,仍有5个查询中的4个仍然完成。我在这里缺少什么?
答案 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