4

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

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. 是否有可能我不是在处理超时问题,而是在处理其他一些问题?我已经读过这可能是锁定的迹象......但我可以在测试中重现这一点,这是当时唯一访问数据库的人。会不会是别的东西?

编辑

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

4

2 回答 2

3

CommandTimeout我可以通过在我的 EF 数据上下文中设置如下来解决这个问题:

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

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

于 2012-07-20T22:34:35.217 回答
0

错误是 SQL0952N

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

db2 UPDATE CLI CFG FOR SECTION COMMON 使用 QUERYTIMEOUTINTERVAL 0

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

于 2019-11-28T18:09:52.890 回答