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

Bor*_*yll 4 .net sql db2 entity-framework

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

ERROR [57014] [IBM][DB2] SQL0952N  Processing was cancelled due to an interrupt.
Run Code Online (Sandbox Code Playgroud)

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

同样,这种情况不会每次都会发生(即使对于相同的查询)。例如,我可以一遍又一遍地运行相同的查询,但只会看到错误发生五分之一。查询的持续时间始终相当一致。

我搜索了一些文档并发现了以下内容: 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" />
Run Code Online (Sandbox Code Playgroud)
  1. 是否有其他超时设置覆盖或优先于我在连接字符串中指定的设置?
  2. 我是否有可能处理的不是超时问题而是其他问题?我已经读到这可能表明锁定......但我可以在测试中重现这一点,因为当时是唯一访问数据库的人。会不会是别的什么?

编辑

我只是尝试设置QueryTimeout=1认为这肯定会导致每个查询超时。这似乎没有任何影响。在 WELL 完成一秒多后,五分之四的查询仍然完成。我在这里缺少什么?

Bor*_*yll 5

我能够通过CommandTimeout在我的 EF 数据上下文上设置来解决这个问题,如下所示:

using (dataContext = new myDB2Entities())
{
     dataContext.CommandTimeout = 60;
     // DB CODE
}
Run Code Online (Sandbox Code Playgroud)

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