【问题标题】:What can cause a timeout getting SQL connection from pool?什么会导致从池中获取 SQL 连接超时?
【发布时间】:2013-09-08 07:59:23
【问题描述】:

我在 IIS 下部署了一个 Web 应用程序。它一直在出现超时错误,我相信我已经将问题追溯到没有正确处理 SQL 连接的代码。

这需要大量的手术来修复,所以至少在我可以正确使用 using 块完成实现和测试新代码之前,我决定将连接池的大小提高到天文数字。但这似乎没有帮助。我的连接字符串是:

数据源=MyServer;初始目录=MyDb;用户ID=MyUser;密码=MyPwd;最大池大小=10000

我的日志文件显示:

System.InvalidOperationException:超时已过期。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且已达到最大池大小。

在此期间,我一直保持性能监视器处于打开状态,并且用户连接数最高达到 150 左右。所以我认为我们的连接数不会用完。

还有什么可能导致此错误?

【问题讨论】:

  • 您可能 正在 最大化连接 - 可能在 服务器 端。您确实需要确保连接关闭,并且尽可能保持打开状态。
  • @Oded - 我认为 SQL Server 最多可以支持 32,768 个连接?还是我在做梦?
  • AFAIK,如果你配置它(服务器和数据库)
  • @Shaul:- 请检查您在哪里指定了设置超时字段的连接???"integrated security=SSPI;SERVER=YOUR_SERVER;DATABASE=YOUR_DB_NAME;Min Pool Size=5;Max Pool Size =10000;连接超时=60;"
  • @RahulTripathi - 我想我知道你在说什么,连接池要求连接字符串相同。但如果它们不相同,那只会导致更多个连接池,而不是更少,不是吗?

标签: c# iis-7 sql-server-2012


【解决方案1】:

不幸的是 SqlCommand 不遵守 ConnectionString 或 SqlConnection 的超时。并且必须手动设置。这是因为连接字符串中提到的超时用于连接,而不是执行。所以请考虑通过代码设置它的超时。

var conn = new SqlConnection(cs);
var cmd = conn.CreateCommand();
cmd.CommandTimeout = conn.ConnectionTimeout;
...

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 2012-04-19
    • 2015-03-27
    • 1970-01-01
    • 2023-03-14
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多