我讨厌提起这件事b / c有这么多数百页在谈论这个错误可以追溯到7 - 8年......但是,我无法想象这一点。
我在服务器A上运行的报表服务连接到服务器B上的SQL Server 2008 R2。两台服务器都运行Windows Server 2008.报表服务是多线程的,每次运行最多10个报表自己的线程 我的连接字符串如下:
Data Source=ServerB;Initial Catalog=DBName;trusted_connection=YES;Connection Timeout=0;Max Pool Size=500;
如您所见,我已将连接超时设置为0以等待连接,直到其可用,并且最大池大小为500 b / c我想确保池对于我的多线程服务来说不是太小。该错误通常仅在服务启动时显示,并且存在等待处理的报告队列。
很明显,要做的第一件事就是寻找泄漏的连接..必须有未被关闭的连接导致池填满,对吧?没有 - 看起来像游泳池永远不会填满。
我花了最近几个小时在服务器上运行性能监视器,观看“.NET数据提供程序为SqlServer”,而NumberOfPooledConnections从未超过20左右。我还在SQL服务器上运行perfmon,观看“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()
谢谢, 斯蒂芬