>从服务器接收结果时发生传输级错误. (提供者:TCP提供者,错误:0 – 信号量超时期限已过期.)
>从服务器接收结果时发生传输级错误. (提供者:TCP提供者,错误:0 – 信号量超时期限已过期.)
我们有3个连接到此sql Server的Web服务器,运行大约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后,有没有人看到过这样的错误?
链接:
> https://stackoverflow.com/questions/810673/connection-problems-with-sql-server-in-asp-net-applications-using-out-of-process
> http://blogs.msdn.com/b/spike/archive/2009/04/16/a-transport-level-error-has-occurred-when-sending-the-request-to-the-server-provider-tcp-provider-error-0-an-existing-connection-was-forcibly-closed-by-the-remote-host.aspx
解决方法
最终将原因作为涉及Load Balancer的网络配置问题进行跟踪.我们原本期望Load Balancer位于互联网和我们的Web服务器之间,并且我们所有的服务器都是相互自由通信的.遗憾的是,网络的设置方式使得所有网络流量(包括sql Server和Web服务器之间的流量)都通过负载均衡器. Load Balancer配置为限制通过它的带宽,当超过限制时,它只是丢弃数据包.在服务器之间发生大型文件传输时(例如,从数据库服务器复制数据库备份等),通常会超出限制.这对我们来说很难看到,因为我们无法访问Load Balancer(只有我们的托管服务提供商可以访问它),而且据我们所知,我们远远没有使我们的网络接口饱和.此外,这些问题非常零散(每3-5个月就会有几分钟).
修复是重新安排环境,以便我们的内部网络流量不通过LB;我相信网络被重新安排以适应单臂负载平衡架构.自从进行此更改以来,我们没有遇到间歇性连接问题.