10

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

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

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

  • 有火星,没有。
  • 带池和不带
  • 有 async=true 和没有

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

一切都是最近安装的,所以它是最新的。它们可能与high cpu(尽管不完全根据我所看到的监视器)相关联。也与high request rates搜索引擎相关。但是,高 cpu/请求不应导致 sql 连接重置 - 最坏的情况是我们应该有高响应时间或 iis 拒绝发送响应。

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

4

4 回答 4

1

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

此时您再次检测到此错误

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

  • 打开一个新的查询窗口

  • 运行sp_who2

  • 检查blkby列,它是Blocked By的缩写。如果该列中有任何数据,则表示您有死锁问题(通常应该像我附上的屏幕截图一样,完全为空)。

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

在此处输入图像描述

于 2013-01-10T08:35:38.013 回答
0

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

通过事件 ID 17886 MSSQLServer – 服务器将断开连接

于 2015-04-07T15:56:52.127 回答
0

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

sp_who2

DBCC 输入缓冲区 (62) 执行

于 2015-07-08T10:17:45.273 回答
0

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

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

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

于 2018-11-16T15:14:11.300 回答