解决数据库迁移后的 SQL 连接问题

解决数据库迁移后的 SQL 连接问题

我们刚刚完成从 SQL 2000 到 SQL 2008 R2 的迁移,并且开始间歇性地接收 SqlExceptions,并出现以下两条错误消息:

  • 从服务器接收结果时发生传输级错误。(提供程序:TCP 提供程序,错误:0 - 信号量超时期限已过期。)
  • 从服务器接收结果时发生传输级错误。(提供程序:TCP 提供程序,错误:0 - 信号量超时期限已过期。)

我们有 3 个 Web 服务器连接到此 SQL Server,运行大约 100 个应用程序(所有应用程序都访问 SQL Server 上的相同 8 个数据库)。

由于这些异常没有发生在 2000 服务器上,我们觉得这不太可能是应用程序问题(但是,我们并不排除这种可能性)。网站上的流量很正常,排除了高流量问题。旧的 SQL 2000 机箱有 4 个 CPU 和 8 GB RAM,而新的机箱有 24 GB RAM 和 16 个 CPU(目前和发生问题时都未充分利用)。

这些错误发生在几个小时前,持续了大约 5 分钟,目前尚未再次发生。

sys.dm_os_ring_buffers 系统视图未显示这些断开连接的条目,并且服务器或客户端上都没有相应的事件日志条目。

谷歌搜索发现了一些类似的报告,但似乎没有明确的结论(见下面的链接)。从 SQL 2000 迁移到 SQL 2008 R2 后,有人见过这样的错误吗?

链接:

答案1

我们已经在我们的环境中找到并修复了这个问题。以下是我理解的描述(请原谅以下可能出现的不准确之处;这是我(作为软件开发人员)理解我们的网络管理员(他也与我们的托管公司合作)给我的描述的方式。

最终查明原因是与负载均衡器有关的网络配置问题。我们原本以为负载均衡器位于互联网和我们的 Web 服务器之间,并且我们所有的服务器都可以自由地相互通信。不幸的是,网络的设置方式是所有网络流量(包括 SQL 服务器和 Web 服务器之间的流量)都通过负载均衡器。负载均衡器配置为限制通过它的带宽,当超过限制时,它只会丢弃数据包。当服务器之间发生大文件传输时(例如,当数据库备份从数据库服务器复制出来时等),通常会超过限制。这对我们来说很难发现,因为我们无法访问负载均衡器(只有我们的托管服务提供商可以访问它),而且据我们所知,我们的网络接口还远未饱和。此外,这些问题非常零散(大约每 3-5 个月几分钟出现一次)。

解决办法是重新安排环境,这样我们的内部网络流量就不会经过 LB;我相信网络已经重新安排以适应单臂负载平衡架构。自从进行这一更改以来,我们再也没有遇到过间歇性连接问题。

答案2

如果我理解正确的话,你不仅更改了软件,还更改了硬件 - 因此有很多更改可能会导致此连接错误。我看到很多建议仔细检查你的 NIC 驱动程序和主板固件(!!)以修复此问题。哎呀!

无论如何 - 您应该能够在服务器应用程序日志中看到此错误。从这里您可以了解异常发生的日期/时间,以便将其与单个客户端/应用程序事件进行比较,以缩小此异常出现时发生的情况。

您还可以使用 Netmon 跟踪从客户端到服务器的连接。您需要给它几天时间来重现错误。这应该会缩小一点范围,至少让您知道哪里出了问题。

答案3

上次我看到“信号量超时时间已到期”是在我尝试将文件从 Windows Server 2008 上的一个硬盘复制到另一个硬盘时。似乎是因为硬盘碎片太多,有坏簇。顺便说一下,Western Digital 2TB Caviar Green 不在 RAID 中。

答案4

这个问题已经讨论很久了,但我还是想发表一下我的看法。在我们的案例中,有问题的 SQL 服务器位于不同的网络上,中间有防火墙,因此 IPS 开始发挥作用。它已经工作了很多年,但显然就在本周,IPS 收到了旧检测签名的新版本,它将其称为“攻击 MSSQL:Microsoft SQL 缓冲区溢出漏洞高出站”。因此它开始阻止通过端口 1433 的连接尝试。

相关内容