【问题标题】:No connections available in ADO.NET connections poolADO.NET 连接池中没有可用的连接
【发布时间】:2010-11-25 18:05:09
【问题描述】:

我试图找出生产环境中与 ADO.NET 连接池相关的异常数量增加的原因,我可以在日志中看到很多此类异常:

超时。超时时间 在获得一个之前经过 来自池的连接。这可能 已经发生,因为所有汇集 连接正在使用和最大池 已达到大小。

我尝试的第一件事是确保所有连接都已关闭和处置。为此,我们将所有数据库连接更改为:

try
{
     oConnection.Open();
     //do something
}    
catch()
{

}
finally
{
     if (oConnection.State != ConnectionState.Closed)
     {
         oConnection.Close();
         oConnection.Dispose();
     }
}

我正在使用以下连接字符串:

server=databaseserver;Database=databasename;User Id=username;Password=password;Max Pool Size=600;Min Pool Size=50;Connection Timeout=180;Pooling=true

在 Performance Manager,SqlServer 的 .NET 数据提供程序中,我可以看到“NumberOfPooledConnections”和“NumberOfActivePooledConnections”始终低于连接字符串的最大池大小,始终在 60 到 90 个连接之间。

有谁知道这怎么可能?我收到池上没有连接的异常,但我可以看到池未满。

我的环境:

  • Windows Server 2003 Enterprise SP2(包含所有最新补丁)
  • IIS 6.0(网络园中有 4 个工作进程,应用程序池每 60 分钟回收一次)
  • SQL Server 2005

谁能帮帮我?

【问题讨论】:

    标签: c# sql-server sql-server-2005 ado.net


    【解决方案1】:
    using (oConnection) {
    
       oConnection.Open();
    
       // Your code here
    
       // No need to explicitly close or dispose
    
    }
    

    【讨论】:

    • 嗨 Mahesh Velaga,我明白你的意思,但是,传感器显示的连接数少于连接字符串中的最大池大小是否正确?
    【解决方案2】:

    这段代码

    if (oConnection.State != ConnectionState.Closed)
    {
         oConnection.Close();
         oConnection.Dispose();
    }
    

    不会 Dispose() 关闭的连接。我不确定这是不是问题,但应该解决。 Jusr 使用无条件 Dispose() 或 using() { } 块。

    【讨论】:

      【解决方案3】:

      状态可能已关闭,但连接仍未释放,因此您并没有真正释放连接,请按照之前的建议使用 using 块。

      【讨论】:

        【解决方案4】:

        首先,SQL Server 允许的最大连接数设置与 ADO.NET .NET 连接池中允许的最大连接数设置不同。

        其次,调用SqlConnection.Close() 并不会真正关闭它与 SQL Server 的连接。它只是告诉连接池不再需要保持连接打开。但是,如果请求具有相同连接字符串的另一个连接请求,连接池将使其保持打开更长时间。要观察这一点,请在“关闭”连接之前和之后检查 SQL Server 的活动监视器。您会看到 SQL Server 上的连接状态实际上是在休眠。

        关于你的超时例外,我同意大家的建议,使用using() { } 块。最重要的是,如果您使用的是 SqlDataReader,请确保您也将其关闭。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-14
          • 1970-01-01
          • 2018-07-10
          • 1970-01-01
          相关资源
          最近更新 更多