如何解决连接池问题?
我最近开始在我的开发计算机上遇到 SQL Server 的数据库连接问题。
System.InvalidOperationException:超时已过期。从池中获取连接之前超时时间已过
如何监视连接池以了解发生了什么情况?
更多信息:
我在这方面运气不太好 - 我绝对没有泄漏连接。每个连接都位于 using
语句内。
当问题确实发生时,我打开了性能监视器窗口,并且它没有显示任何接近池限制(即 100)的地方 - 通常大约有 2 - 5 个连接,所以我认为池没有耗尽,所以也许这是一个超时。
但是,我已将 ConnectionTimeout
设置为 0 - 根据文档,这意味着它应该永远等待连接 - 但我没有看到这一点。
当它确实发生时,它发生得相当快 - 我在 VS2010 的调试器下运行 - 启动我的应用程序的一个新实例 - 它可能会在启动后的一两秒内发生 - 在启动应用程序时,有几个查询发生。我实际运行的 SQL Server 是 SQL Express 2008。也许我应该尝试在 SQL Server 2008 上运行它,看看是否看到任何不同的行为。
还有其他想法吗?
I have recently started encountering Database connection issues with SQL Server on my development machine.
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool
How can I monitor the connection pool to figure out what is happening?
Further Info:
I haven't had much luck with this - I'm definitely not leaking connections. Every connection is inside a using
statement.
When the problem does occur, I have the Performance Monitor window open and it's not showing anywhere near the limit of the pool (which is 100) - generally around 2 - 5 connections, so I don't think the pool is being exhausted so maybe it's a timeout.
However, I have set the ConnectionTimeout
to 0 - which, according to the documentation, means it should wait forever to connect - but I'm not seeing this.
When it does occur, it happens fairly quickly - I'm running under the debugger from VS2010 - starting a new instance of my application - and it might happen within a second or two of starting - in starting up the app there are several queries that happen. The actual SQL Server I'm running against is SQL Express 2008. Maybe I should try running it against SQL Server 2008 and see if I see any different behaviour.
Any other ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
查看与池相关的 ADO.NET 性能计数器。
您所描述的症状通常表明您存在泄漏连接。确保所有连接在完成后都已释放,最好通过使用
using
语句进行包装。Take a look at the ADO.NET Performance Counters related to pooling.
Your described symptom is often an indication that you are leaking connections. Make sure all connections are disposed when you are finished with them, preferably by wrapping in an
using
statement.下面是一些尝试池然后故障转移到非池化的代码:
如果池出现问题,请使用此子程序:
以下是一些监视池的代码:
here's some code to try the pool and then failover to unpooled:
use this sub if a problem happens with the pool:
Here's some code to monitor the pool: