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

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

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

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


更新:

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

更新:

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


当前回答

在我们的网站上,我们也不时地遇到这个问题。在我们的案例中,罪魁祸首是我们的统计数据/索引过时了。这将导致先前快速运行的查询(最终)变慢并超时。

尝试更新统计信息和/或在受查询影响的表上重建索引,看看是否有帮助。

其他回答

用这个:

finally
{
    connection.Close();
    connection.Dispose();
    SqlConnection.ClearPool();
}

当我在一个。net应用程序中使用一些第三方数据层时,我也遇到过这个问题。问题是该层没有正确地关闭连接。

我们扔掉了这个层,自己创建了一个,它总是关闭和处理连接。从那以后,我们就不会再得到错误了。

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

如果你没有在你的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();
    }

在我的情况下,我有无限循环(从一个get属性试图从数据库中获取值),不断打开数百个Sql连接。

要重现这个问题,试试这个:

while (true)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        someCall(connection);
    }
}

这个问题,我在我的代码。我将粘贴一些示例代码,我已经来到下面的错误。 从池中获取连接之前的超时时间。这可能是因为所有池连接都在使用中,且池大小已达到最大。

 String query = "insert into STATION2(ID,CITY,STATE,LAT_N,LONG_W) values('" + a1 + "','" + b1 + "','" + c1 + "','" + d1 + "','" + f1 + "')";
    //,'" + d1 + "','" + f1 + "','" + g1 + "'

    SqlConnection con = new SqlConnection(mycon);
    con.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = query;
    cmd.Connection = con;
    cmd.ExecuteNonQuery();
    **con.Close();**

您希望每次都关闭连接。在此之前,我没有我们关闭连接,由于这个我得到了错误。 添加结束语句后,我已经克服了这个错误