4

服务器 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,这将需要几个月的时间,并且可能会导致许多其他类型的问题。

4

2 回答 2

1

我认为您还必须增加连接超时值和连接池。这样它就不会在重负载时释放与 SQL Server 的连接。

于 2012-12-27T10:53:04.033 回答
0

对我来说,解决方法是将 SQL 服务器配置为允许无限数量的连接(设置为“0”值)。如原始帖子中所述,我仍然遇到一些连接问题,但远没有那么严重。因此,我还通过每个服务器上的辅助以太网端口(Webserver 到 SQL Server)设置了与 SQL 服务器的直接连接,并使用服务器之间的 196.168.1.x 保持连接私有,并使用它自己的未连接到的以太网交换机公共开关。

于 2020-07-17T01:53:57.367 回答