【发布时间】:2009-07-31 00:22:48
【问题描述】:
在中等负载下,我们偶尔会在某个数据库上收到以下错误。
“System.InvalidOperationException: Timeout expired。在从池中获取连接之前已经过了超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。”
我已经梳理了代码,我们正在关闭 finally 块中的连接,就像我们应该做的那样,除了在少数情况下,我们已经建立了很少被调用的情况。我们将在下一个版本中修复这些代码,但为了解决当前的生产问题,我建议将最大池大小增加到 300。我们目前遇到的最大并发用户数约为 110,这显然超过了默认池大小( 100)。
我还建议确保我们到特定 SQL Server 实例的所有连接字符串都相同,以避免不必要地创建多个连接池。我希望当我们需要在单个 SQL Server 实例中切换数据库时,我们可以在实际 SQL 查询之前使用 USE [Database] 语句。
你们有什么想法、建议、建议或陷阱需要我们注意吗?
【问题讨论】:
标签: sql-server ado.net connection-pooling