我们有一个运行我们的应用程序的IIS 6服务器的Web场。
我们的会话存储在Sql Server 2005上的不同服务器上。
每隔几个月,我们都会在其中一个Web服务器日志中发现此错误: “Timeout expired。超时时间在从池中获取连接之前已过去,这可能是由于所有使用的池连接正在使用和最大池大小达到”Asp.Net中Session的问题
堆栈跟踪: System.Data.ProviderBase.DbConnectionInternal 的getConnection(System.Data.Common.DbConnection) 在 System.Data.ProviderBase.DbConnectionFactory.GetConnnection(的DbConnection 拥有连接)在 System.Data.ProviderBase。 DbConnectionClosed.OpenConnection(的DbConnection outerConnection,DbConnectionFactory connectionFactory的)在 System.Data.SqlClient.SqlConnection.Open() 在 Systme.Web.SessionState.SqlSessionStateStore.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo)
当这个异常被抛出时,服务器开始表现得很奇怪 - 有些用户可以访问应用程序,有些则不会。
到目前为止,我们发现的唯一解决方案是重置该服务器上的IIS。
我也应该mantion服务器不appered被超载和preformence是非常正常的这种情况以前..
任何想法?
除非您有一个非常具体的使用SQL的理由,否则您可以使用不带SQL的公共状态服务器,这会显着提高速度。 – 2011-05-24 06:42:03
不幸的是,常见的状态服务器根本不会为大量用户剪切它,并且只能在Web场中使用粘性会话时才能使用。 – YsA 2011-05-24 07:51:49
在我以前的工作中,我们有超过六百万用户,并且在多个Web和状态服务器上使用没有SQL的状态服务器没有问题。 – 2011-05-25 06:08:12