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

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

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

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


更新:

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

更新:

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


当前回答

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

其他回答

如果您正在处理复杂的遗留代码,只需使用(..){..}是不可能的-正如我所做的那样-您可能想要查看我在这个SO问题中发布的代码片段,以确定当连接可能泄漏(在设置超时后未关闭)时连接创建的调用堆栈。这使得发现泄漏的原因相当容易。

除非您的使用量增加了很多,否则不太可能只是有工作积压。在我看来,最有可能的选择是某些东西正在使用连接,并且没有及时释放它们。你确定你在所有情况下都使用了using吗?或者(通过任何机制)释放连接?

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

 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();**

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

这个问题我以前遇到过。结果是防火墙出了问题。我刚在防火墙里加了条规则。我必须打开端口1433,以便SQL服务器可以连接到服务器。

确保您为连接池设置了正确的设置。这是非常重要的,正如我在下面的文章中解释的那样: https://medium.com/@dewanwaqas/configurations-that-significantly-improves-your-app-performance-built-using-sql-server-and-net-ed044e53b60 如果遵循该方法,您将看到应用程序的性能有了极大的改善。