最近几天,我们经常在网站上看到这样的错误信息:

“超时过期。超时时间 在获取 来自池的连接。这可能 已经发生是因为全部池化了吗 连接正在使用,马克斯泳池 规模达到了。”

我们已经有一段时间没有更改代码中的任何内容了。我修改了代码以检查未关闭的打开连接,但发现一切正常。

我怎么解决这个问题? 我需要编辑这个池吗? 如何编辑此池的最大连接数? 高流量网站的推荐值是多少?


更新:

我需要在IIS中编辑一些东西吗?

更新:

我发现活动连接的数量在15到31之间,我发现在SQL server中配置的最大允许连接数超过3200个连接,是31太多了还是我应该在ASP中编辑一些东西。网络配置?


当前回答

你也可以尝试一下,解决超时问题:

如果你没有在你的webconfig中添加httpRuntime,在<system中添加。网络>标记

<sytem.web>
     <httpRuntime maxRequestLength="20000" executionTimeout="999999"/>
</system.web>

and

像这样修改你的连接字符串;

 <add name="connstring" connectionString="Data Source=DSourceName;Initial Catalog=DBName;Integrated Security=True;Max Pool Size=50000;Pooling=True;" providerName="System.Data.SqlClient" />

最后使用

    try
    {...} 
    catch
    {...} 
    finaly
    {
     connection.close();
    }

其他回答

起初我并不认为这是我的问题,但在浏览这个列表时,我发现它并没有涵盖我的问题。

我的问题是,我有一个错误,它试图写相同的记录多次使用实体框架。它不应该这样做;那是我的bug。看看你正在写的数据。我的想法是SQL正在忙着写记录,可能是锁定和创建超时。在我修复了试图在连续尝试中写入记录倍数的代码区域之后,错误就消失了。

我也有同样的问题,想要分享帮助我找到源头的东西: 将应用程序名称添加到连接字符串中,然后监视到SQL Server的打开连接

select st.text,
    es.*, 
    ec.*
from sys.dm_exec_sessions as es
    inner join sys.dm_exec_connections as ec on es.session_id = ec.session_id
    cross apply sys.dm_exec_sql_text(ec.most_recent_sql_handle) st
where es.program_name = '<your app name here>'

您可以通过在连接字符串中指定MinPoolSize=xyz和/或MaxPoolSize=xyz来指定最小和最大池大小。然而,这个问题的原因可能是另一回事。

我也面临着同样的问题,经过几个小时的研究,我意识到我是在没有VPN的Guest网络上连接的,所以设置VPN对我来说很管用

我在AWS EC2实例上也得到了这个确切的错误日志。

因为我只是部署alpha应用程序(没有真正的用户),所以没有出现连接泄漏,而且我向Activity Monitor和sp_who确认实际上没有到数据库的连接。

我的问题与AWS有关——更具体地说,与安全组有关。只有特定的安全组可以访问我存放数据库的RDS服务器。 我使用authorization -security-group-ingress命令添加了一个入口规则,允许使用——source-group-name参数访问RDS服务器的正确EC2实例。添加了入口规则,我可以在AWS UI上看到-但我得到了这个错误。

当我在AWS UI上手动删除并添加入口规则时,突然异常不再,应用程序正在工作。