间歇性“批次被中止”异常

Posted

技术标签:

【中文标题】间歇性“批次被中止”异常【英文标题】:Intermittent "batch is aborted" exceptions 【发布时间】:2012-08-01 16:30:30 【问题描述】:

我有一个以 .NET 4.0 数据库为中心的应用程序(厚客户端,WinForms)运行在数百个环境中(每个环境都由我们维护客户的 IT 人员)。 该应用程序是对我公司使用多年的旧 FoxPro 产品的重写。

该应用程序似乎对我们的所有客户都运行良好,但有一个客户出现间歇性异常,如下所示:

System.Data.SqlClient.SqlException (0x80131904):超时。在操作完成之前超时时间已过或服务器没有响应。

请求运行失败,因为批处理被中止,这可能是客户端发送的中止信号引起的,或者同一会话中正在运行另一个请求,导致会话繁忙。

我可以在网上找到的所有关于此的信息(例如here 和here)都说此问题是 SQL Server 2005 的错误,已在 SP1 中解决。但是,此客户使用的是 SQL Server 2008 R2 Express(这已由我们公司验证;我们不只是相信客户的话)。此外,我们没有使用连接池或分布式事务,因此我发现的链接似乎更不相关。

同样,这些问题是间歇性的(每天几次),并且发生在所有不同的工作站上(似乎表明这不是单个客户端的问题)。旧版 FoxPro 应用程序仍然存在于他们的环境中并且工作正常(针对完全相同的数据库),这似乎表明它不仅仅是网络或数据库服务器问题。

任何帮助将不胜感激。

【问题讨论】:

死锁? SQL Server Profiler 可能有助于确定。 也许,但是为什么会出现糟糕的异常消息呢?为什么没有其他客户报告相同? 您是在询问为您带来ERROR_SUCCESS 的人提供的诊断信息的质量?您可能会发现一些有关超时的故障排除提示here。不确定“批次已中止”部分。 【参考方案1】:

这些错误表明在服务器返回结果之前已达到CommandTimeout(默认为 30 秒)。这并不表示任何错误,也没有 SP 可以解决它。这是一个性能问题(很可能缺少索引),必须作为性能问题进行调查。尝试关注 SQLCAT performance troubleshooting flowchart。

【讨论】:

存在正确和彻底的索引。对于数百个其他安装,性能不是问题。一些失败的查询是相当微不足道的。此安装可能存在一些性能问题,但我们预计旧应用程序也会出现问题。我知道异常的第一部分提到了超时,过去我们已经解决了许多其他与超时相关的异常,其中性能是一个问题。我相信这是不同的。请参阅异常消息的后半部分。是什么原因造成的? 后半部分解释了造成这种情况的原因:abort signal sent from client。 IE。已达到 CommandTimeout。 过去当我们得到超时异常时,消息的后半部分没有出现,只有前半部分。我仍然认为消息的附加部分是这里的关键因素,但我将从性能的角度进行调查(无论如何,我没有其他选择)。感谢您的快速回复。

以上是关于间歇性“批次被中止”异常的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure 中托管的 ASP.NET Core 5.0 MVC 站点调用 API/服务的间歇性套接字异常

调试 CoreData 异常

EndpointNotFoundException异常的可能原因是什么?

springboot hikari数据库死链 出现异常

sql2000 数据备份间歇性异常,删除系统操作日志,收缩数据库后;隔一段时间数据库又快速增大(约50M/天)

springboot hikari数据库连接池死链 出现异常