错误17886 - 服务器将断开连接

时间:2013-01-10 08:11:15

标签: sql-server sql-server-2008 windows-server-2008-r2

我们正在使用sql server 2008 x64 r2在vps服务器上运行一个网站。我们被17886错误轰炸 - 即:

  

服务器将断开连接,因为客户端驱动程序具有   会话处于单用户模式时发送多个请求。这个   客户端发送重置连接请求时发生错误   虽然批次仍然在会话中运行,或者当时正在运行   客户端在会话重置连接时发送请求。   请联系客户端驱动程序供应商。

这会导致sql语句返回损坏的结果。我已经尝试了几乎所有我在网上找到的建议,包括:

  • 与火星,没有。
  • with pooling and without
  • async = true且不带

我们只有一个数据库,绝对是多用户。

最近安装了所有内容,因此它是最新的。它们可能与high cpu相关(虽然不完全根据我所见过的监视器)。还与来自搜索引擎的high request rates相关联。但是,高CPU /请求不应该导致sql连接重置 - 最坏的情况下我们应该有很高的响应时间或者我拒绝发送响应。

有什么建议吗?我只是一个开发人员而不是dba - 我需要一个dba来解决这个问题吗?

4 个答案:

答案 0 :(得分:1)

不确定但是您的某些查询可能会导致服务器死锁。

此时您再次检测到此错误

  • Open Management Studio(在服务器上,必要时安装)

  • 打开新的查询窗口

  • 运行 sp_who2

  • 检查 blkby 列,该列是阻止者的缩写。如果该列中有任何数据,则会出现死锁问题(通常情况下,它应该像我附加的屏幕截图一样,完全为空)。

如果您遇到死锁,我们可以继续执行后续步骤。但是现在请检查一下。

enter image description here

答案 1 :(得分:0)

要修复上述错误,需要将“MultipleActiveResultSets = True”添加到连接字符串中。

通过Event ID 17886 MSSQLServer – The server will drop the connection

答案 2 :(得分:0)

我会创建一个事件日志任务,每当抛出17886时都会通过电子邮件发送给您。然后立即转到db并执行sp_who2,获取blkby spid并运行dbcc inputbuffer。希望eventinfo能为您提供更加切实的东西。

sp_who2

DBCC INPUTBUFFER(62) GO

答案 3 :(得分:0)

在您的DI实例代码中使用“每请求实例数”策略,您的问题将得到解决

很可能您正在使用依赖项注入。在Web开发过程中,必须考虑并发请求的可能性。因此,您必须确保在DI期间每个请求都获得新实例,否则您将陷入并发问题。通过对服务和上下文使用“ .SingleInstance”,不要便宜。

启用MARS可能会减少错误数量,但是遇到的错误将不太清楚。启用MARS永远不是解决方案,除非您知道自己在做什么,否则不要使用它。