我讨厌提起这件事,因为有这么多页在谈论这个7-8年前的错误……然而,我不太明白这一点。
我有一个报告服务在服务器A上运行,它连接到服务器B上的SQL Server2008 R2。报表服务是多线程的,一次最多运行10个报表,每个报表都在自己的线程上。
我的连接字符串如下:
Data Source=ServerB;Initial Catalog=DBName;trusted_connection=YES;Connection Timeout=0;Max Pool Size=500;正如您所看到的,我将连接超时设置为0,以等待连接可用,并将最大池大小设置为500 b/c。我希望确保池对于我的多线程服务不会太小。该错误通常仅在服务启动并且有一个报告队列等待处理时才会出现。
所以很明显,首先要做的是寻找泄漏的连接..必须有未关闭的连接导致池填满,对吧?不,-looks,就像游泳池永远不会填满一样。
我花了几个小时在服务器上运行性能监视器,观察“用于SqlServer的.NET数据提供程序”,NumberOfPooledConnections永远不会超过20。我还让perfmon在SQL server上运行,查看"SQLServer:General Statistics“,而UserConnections永远不会超过50。在此期间,我通过手动重新启动服务,导致此错误报告了2到3次。
我还能找什么呢?还有什么会导致这个错误?完整的错误消息为:
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()谢谢,斯蒂芬
发布于 2011-06-02 04:13:25
这是已知的错误,如here所示
由微软于2008年8月15日上午11:31发布,感谢您的反馈。该修复程序已提交给下一个主要.Net版本的源代码分支。
https://stackoverflow.com/questions/6206998
复制相似问题