我们有一个非常奇怪的间歇性问题,该问题在上个月左右开始出现,其中一些与 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)
该错误不会导致站点瘫痪,也不需要重新启动数据库 - 如果您只是重新运行相同的查询,第二次就会起作用。这意味着很多用户会时不时地遇到错误,并且必须刷新错误页面才能正常工作。
现在,我最初的下意识反应是这可能是由于:
与资源相关的问题 - 所以我开始运行 SQL Profiler 和 perfmon,但没有发现服务器努力跟上每秒连接数的任何问题。我一直在查看 MSSQL:SQL 错误、MSSQL:等待统计、MSSQL:Exec 统计、MSSQL:Locks。有人对我应该在这里戳戳和刺激的其他统计数据有任何指导吗?
未关闭的数据库连接 - 在检查了所有数据层代码后,我排除了这一可能性。我们已准备好所有故障保险来阻止这种情况发生。
连接/网络相关问题:我们的 SQL 服务器位于与我们的应用程序服务器(在 IIS7 上运行 ASP.Net)不同的服务器(MS SQL Server Standard 2008)上 - 两台服务器都在配置了所有安全策略的 xlarge Amazon EC2 实例上运行(根据亚马逊的方向)。任何人都获得有关如何测试两台服务器之间的连接或者这是否可能是问题的指导?
IIS 连接字符串可能有问题吗?我还没有对此进行测试,但我们是否应该使用我们要连接的计算机名称来完全限定服务器(只是想到了)?我们使用以下格式的连接字符串:server=xxxxx;Database=xxxx;uid=xxxx;password=xxx;
非常感谢您的想法和见解!
提前致谢
解决了。在测试了几乎所有可能的性能指标并检查了每一段代码之后,我发现该错误是由一些已弃用的数据库代码引起的。主要问题是由使用以下代码引起的:
SqlConnection.ClearPools;
为了供将来参考,任何其他想要调试代码和管理连接池的开发人员都可以在这里找到优秀的资源:http://www.codeproject.com/KB/dotnet/ADONET_ConnectionPooling.aspx http://www.codeproject.com/KB/dotnet/ADONET_ConnectionPooling.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)