当 Microsoft SQL 服务器连接超出带宽时会发生什么情况?

What happens when bandwidth is exceeded with a Microsoft SQL Server connection?

100 多个用户使用的应用程序是用 VB6 和 RDO 制作的。一个替代品即将到来,但旧的仍然得到维护。用户搬到街对面的另一栋楼,问题开始了。我对这个问题的看法是带宽,但我不得不与其他说它是数据库的人争论。用户在使用该应用程序时经常会遇到网络缓慢的情况,而且通常还会遇到工作站任务。该应用程序有时会移动大型音频文件并为它们编制索引。有时数据库会挂起。我们有许多高端、强大的 SQL 服务器,所以这不是服务器问题。我发现,交易是在连接上开始的,但由于通信错误而无法正确完成。来自其他连接的更新被阻止,它们继续堆积,用户下降半天。当我被告知有问题时,我开始做的是,在验证数据库已挂起后,将数据库设置为单用户,然后返回多用户以清除连接。他们都必须重新启动他们的应用程序。今天我发现他们的新位置有带宽限制,他们经常用尽带宽。我想在旧位置有一条大管道服务很多人,但现在他们在一条小管道上服务少数人,这也不太能容忍瞬间的高带宽需求。

我想知道的是,当达到带宽限制时,来往数据包究竟会发生什么情况。我也想知道 SQL 服务器通信中发生了什么。有些数据包会被丢弃吗?他们是否开始更乱序到达?是否出现计时问题?

我计划开始控制诸如文件在应用程序中移动之类的事情。但我也想知道关于瞬态高需求的网络节点上通常存在哪些配置。

这是一个非常宽泛的问题。网络对于良好的性能非常关键(尤其是在可用性组或任何类型的镜像设置中)。当 SQL 服务器上的事务完成后,它们将被放入输出缓冲区。然后应用程序需要 'pick up' 该数据,清除它的输出缓冲区并继续。我认为(不知道您的配置)您的应用程序无法完成往返,因为网络管道被请求淹没,因此应用程序无法获得成功完成和关闭所需的内容。这会造成严重破坏,因为网络跟不上应用程序和 SQL 服务器正在尝试执行的操作。然后你在 1 车道的高速公路上发生了 200 辆汽车的连环事故。

事后看来,在每个人过马路之前,应该对网络容量进行广泛的测试。显然,这并没有发生,所以你只能用你拥有的东西做你能做的事。如果公司无法获得稳定的网络连接,情况可能会超出您的控制范围。如果您是 DBA,我强烈建议您与您的上级交谈并向他们解释网络容量减少的后果。很多时候,显示不作为的后果会导致采取行动。

出于好奇,有什么方法可以分析发生堆积时发生的等待情况吗?我认为它会类似于 ASYNC_NETWORK_IO,这通常表示 SQL 正在等待应用返回并获取它的数据。