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

Sam*_*eby 4 sql-server

我们的几个 Web 应用程序都出现了一个间歇性错误,它们都说同样的话:

System.Data.SqlClient.SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)---> System.ComponentModel.Win32Exception:找不到网络路径

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

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

是否有我们可以打开的日志?我们应该首先排除什么?

Hal*_*aar 5

我们实际上在 Python 应用程序中遇到了类似的情况,使用 pymssql 驱动程序。我们的具体信息是“意外的 EOF”。我们一直想不通。我们刚刚在客户端实现了重试...

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

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

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

我想在你的情况下我会:

  • 使用 tcpdump 技巧
  • 编写一个每分钟连接一次的测试脚本或小应用程序,看看您是否可以以这种方式重现它。
  • 如果您可以以这种方式重现它,还请查看您是否尝试使用简单的 TCP 连接到该端口,是否也会失败。因为您的错误是“找不到网络路径”,所以实际上可能是这种情况。