首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在从池中获取连接之前超时时间已过-但池未满

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

Stack Overflow用户
提问于 2011-06-02 04:05:40
回答 1查看 14.5K关注 0票数 11

我讨厌提起这件事,因为有这么多页在谈论这个7-8年前的错误……然而,我不太明白这一点。

我有一个报告服务在服务器A上运行,它连接到服务器B上的SQL Server2008 R2。报表服务是多线程的,一次最多运行10个报表,每个报表都在自己的线程上。

我的连接字符串如下:

代码语言:javascript
复制
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次。

我还能找什么呢?还有什么会导致这个错误?完整的错误消息为:

代码语言:javascript
复制
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()

谢谢,斯蒂芬

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-02 04:13:25

这是已知的错误,如here所示

由微软于2008年8月15日上午11:31发布,感谢您的反馈。该修复程序已提交给下一个主要.Net版本的源代码分支。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6206998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档