你如何开始诊断间歇性的SQL Server连接错误?

我们的几个Web应用程序有一个间歇性的错误,都说同样的事情:

System.Data.SqlClient.SqlException:build立与SQL Server的连接时发生networking相关或实例特定的错误。 服务器未find或无法访问。 validation实例名称是否正确,并将SQL Serverconfiguration为允许远程连接。 (提供程序:命名pipe道提供程序,错误:40 – 无法打开连接到SQL Server)—> System.ComponentModel.Win32Exception:未findnetworkingpath

我们无法重现这个问题。 一切正常99%的时间。 我们每天看到这些错误2到3次。 发生的时间不一致。 我们在AWS中运行两个独立的服务器:一个SQL Server Standard 2016服务器和一个运行我们的.NET Web应用程序的独立服务器。 Web应用程序通过ADO.NET连接。

我们如何开始诊断这些错误?

我们可以打开日志吗? 我们应该先排除什么?

实际上,我们使用pymssql驱动程序,从Python应用程序中得到了类似的情况。 我们的具体信息是“意外的EOF”。 我们从来没有想过。 我们只是在客户端执行重试…

我们尝试了很多东西。 作为正常监视的事情,我们监视活动TCP连接的数量。 也许他们超过了SQL Server的最大值? 但一切都很好。

最后,我们运行一个tcpdump来捕获所有的stream量,所以我们可以在Wireshark中查看它。 将其设置为显示UTC时间,以便您可以匹配日志条目。 也许还logging该特定连接的返回TCP端口或其他可识别的信息。

我们发现服务器有时会在TDS预login消息之后立即发送FIN (完成)数据包。 没有很好的理由被发现。 连接的最大数目是远远达不到的。

我想你的情况我会:

  • 做tcpdump技巧
  • 写一个testing脚本或连接每一分钟的小应用程序,看看你是否可以重现这种方式。
  • 如果你能以这种方式重现,也可以看看你是否尝试了一个简单的TCP连接到这个端口,不pipe是否失败。 因为你的错误是“networkingpath没有find”,实际上可能是这样的。