服务器1:SQL Server 2008标准版 服务器2:Windows 2008 Server R2,IIS 7.0
服务器2上的网站需要服务器1上的SQL Server中的数据。
一切都运行良好一段时间(有时几周)。然后,在负载很重的情况下,服务器2报告它无法连接服务器1上的SQL Server。一旦服务器2上的IIS报告它无法连接到服务器1上的SQL,它就不会变得更好,直到服务器2上的IIS重新启动。也许重新启动应用程序池可以完全重置IIS。我不确定。
我尝试更改连接字符串以将连接池大小增加到不合理的大值(1,000)。失败仍然发生。
网站是用C#编写的。数据访问层是NHibernate。
以下是例外的开始:
[SqlException (0x80131904): 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)]
System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +428
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +65
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
System.Data.SqlClient.SqlConnection.Open() +122
NHibernate.Connection.DriverConnectionProvider.GetConnection() +60
NHibernate.Impl.SessionFactoryImpl.OpenConnection() +39
为什么会发生这种情况?如何诊断/修复它?我很沮丧并考虑扯掉NHibernate,这需要几个月的时间,并可能导致许多其他类型的问题。
答案 0 :(得分:0)
我认为您还必须增加连接超时值和连接池。这样它就不会在繁重的负载下释放与SQL Server的连接。
答案 1 :(得分:0)
对我来说,解决方法是将SQL Server配置为允许无限数量的连接(设置为“ 0”的值)。如原始文章所述,我仍然遇到一些连接问题,但没有那么多。因此,我还通过每个服务器(从Web服务器到SQL Server)上的辅助以太网端口建立了到SQL Server的直接连接,并使用服务器之间的196.168.1.x以及未连接到其自己的以太网交换机的连接来保持私有连接。公共交换机。