我们在 Windows 2008 R2 上运行 MSSQL 2008 R2,它受到 2 个运行 asp.net 的 Server 2008 R2 Web 服务器的影响。两者都加入了 Active Directory 域并使用集成身份验证连接到 SQL Server。IIS 应用程序池上设置了用户名/密码。在过去一年左右的时间里,它一直运行良好。
我们最近想启动新的网络服务器,我配置了一个新的 Windows 2012 R2,运行完全相同的网站,并使用相同的用户名/密码配置 IIS 应用程序池。在我进行测试时,该网站连接良好且运行良好。但是,一旦我将任何实际负载带到服务器上,我就会看到 IIS 开始挂起并且请求开始堆积。
我进行了内存转储并使用了新的 DebugDiag 2.0 分析,发现请求在打开 SQL 连接时挂起了:
该线程正在尝试打开数据库连接
连接字符串为数据源=10.81.73.66;故障转移伙伴=10.81.73.72;初始目录=XXXX;集成安全性=True;最大池大小=6000;连接超时=30;网络库=dbmssocn;应用程序名称=EntityFrameworkMUE,连接超时设置为30秒。
在分析中我发现了不少例外:
连接超时已过期。尝试使用登录前握手确认时超时已过。这可能是因为登录前握手失败或服务器无法及时响应。尝试连接到 Principle 服务器时发生此故障。尝试连接到此服务器所花费的时间为 - [登录前] 初始化 = 3342;握手 = 0;
有什么想法可以尝试吗?
答案1
我们最终通过删除集成安全性解决了我们环境中的问题,并在连接字符串中指定了用户 ID 和密码。但始终找不到根本原因。
答案2
保罗,
很有可能 SQL 服务器的 IPv4 地址已启用 TCP/IP,但 IPv6 地址未启用,而新服务器正在尝试使用 IPv6。
尝试在 SQL 服务器上启用 IPv6。
在 SQL Server 配置管理器中
- 打开节点 SQL Server 网络配置
- 单击 MYSQLINSTANCE 的协议
- 在右侧,右键单击 TCP/IP
- 单击“属性”
- 选择“IP 地址”选项卡
- 对于每个列出的 IP 地址,确保“活动”和“启用”都为“是”。