繁体   English   中英

从池中获取连接之前的超时时间已过 - 但池未满

[英]The timeout period elapsed prior to obtaining a connection from the pool - but the pool is not full

我什至讨厌提起这个 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 Data Provider for 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()

谢谢,斯蒂芬

这是已知的错误,如此处所示

Microsoft 于 2008 年 8 月 15 日上午 11:31 发布 感谢您的反馈。 该修复程序已提交到下一个 major.Net 版本的源分支。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM