最近一个月左右,我们遇到了一个非常奇怪的间歇性问题,即连接到mssql服务器的一些连接失败并出现以下错误:
System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
这个错误不会导致网站崩溃,也不需要重新启动数据库 - 如果您只是重新运行相同的查询,第二次就可以正常工作。这意味着很多用户偶尔会遇到错误,必须刷新错误页面才能正常工作。
现在,我的最初反应是可能是由于以下原因之一:
1. 资源相关问题 - 所以我开始运行SQL分析器和perfmon,但没有发现服务器在处理连接/秒的数量方面出现任何问题。我一直在查看MSSQL:SQL Errors、MSSQL:Wait Statistics、MSSQL:Exec Statistics、MSSQL:Locks。有人对我在这里应该探索和检查的其他统计数据有指导吗?
2. 未关闭的数据库连接 - 在经过所有数据层代码的检查后,我排除了这个问题。我们已经设置了所有故障保护措施,以防止这种情况发生。
3. 连接/网络相关问题:我们的SQL服务器位于一个单独的服务器上(MS SQL Server Standard 2008),而我们的应用程序服务器(在IIS7上运行ASP.Net)位于另一台服务器上 - 两台服务器都在xlarge Amazon EC2实例上运行,并配置了所有安全策略(根据Amazon的指示)。有人知道如何测试两个服务器之间的连接或者这可能是问题吗?
4. 是否可能是IIS连接字符串的问题?我没有测试过,但我们是否应该使用完全限定的服务器名称来连接(刚想到)?我们使用的连接字符串格式为:
server=xxxxx;Database=xxxx;uid=xxxx;password=xxx;
非常感谢您的想法和见解!提前致谢。