我在 Amazon VPC 中有一个 Web 服务器和一个 SQL 服务器。
以前,VPC 之外的 Webserver 可以正常连接到 SQL Server。
现在,有时,在运行 SQL 脚本(部署脚本在安装时重新运行所有存储过程)时,一些创建过程脚本会失败并出现错误
“执行 Transact-SQL 语句或批处理时发生异常。从服务器接收结果时发生传输级错误。(提供程序:TCP 提供程序,错误:0 - 信号量超时期限已过)”
一旦开始失败,它将继续失败,直到重新启动。失败的总是相同的脚本。重新启动两台服务器可以解决问题,但这不是长期的解决方案。两台机器上的 Windows 防火墙都关闭。两台机器上的 Windows Server 2012。它可能与 Web 服务器上待处理的 Windows 更新相关;每次停止时都有待处理的更新。服务器 Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 2011 年 6 月 17 日 00:54:03 版权所有 (c) Microsoft Corporation Windows NT 6.2(内部版本 9200:)(虚拟机管理程序)上的标准版(64 位)
如果我打开 SQL Server 的安全组,我可以直接连接到它并从我的开发机器运行所有脚本;当我从 Web 服务器运行它们时,它们仍然会失败,所以我很确定问题出在 Web 服务器。我只是不确定如何或为什么。
这些脚本是从数据库自动生成的;它们基本相同,不包含语法错误,从其他地方运行时也可以正常工作。但有些脚本在从 Web 服务器运行时会失效。
可能是什么问题?
答案1
看起来像是两件事的组合:
- 对于 Amazon 服务器来说,默认 MTU 1500 太高
- 阻止 ICMP(AWS 安全组的默认设置)会停止合适 MTU 的协商。
无论如何,到目前为止,设置较低的 MTU 和启用 IMCP 似乎已经解决了该问题。