我们正在使用sql server 2008 x64 r2在vps服务器上运行一个网站。我们被17886
错误轰炸 - 即:
服务器将断开连接,因为客户端驱动程序具有 会话处于单用户模式时发送多个请求。这个 客户端发送重置连接请求时发生错误 虽然批次仍然在会话中运行,或者当时正在运行 客户端在会话重置连接时发送请求。 请联系客户端驱动程序供应商。
这会导致sql语句返回损坏的结果。我已经尝试了几乎所有我在网上找到的建议,包括:
我们只有一个数据库,绝对是多用户。
最近安装了所有内容,因此它是最新的。它们可能与high cpu
相关(虽然不完全根据我所见过的监视器)。还与来自搜索引擎的high request rates
相关联。但是,高CPU /请求不应该导致sql连接重置 - 最坏的情况下我们应该有很高的响应时间或者我拒绝发送响应。
有什么建议吗?我只是一个开发人员而不是dba - 我需要一个dba来解决这个问题吗?
答案 0 :(得分:1)
不确定但是您的某些查询可能会导致服务器死锁。
此时您再次检测到此错误
Open Management Studio(在服务器上,必要时安装)
打开新的查询窗口
运行 sp_who2
检查 blkby 列,该列是阻止者的缩写。如果该列中有任何数据,则会出现死锁问题(通常情况下,它应该像我附加的屏幕截图一样,完全为空)。
如果您遇到死锁,我们可以继续执行后续步骤。但是现在请检查一下。
答案 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永远不是解决方案,除非您知道自己在做什么,否则不要使用它。