ADO.NET连接池中没有可用的连接

0 c# sql-server ado.net sql-server-2005

我试图弄清楚与ADO.NET连接池相关的生产环境中异常数量越来越多的原因,我可以在日志中看到很多例外情况:

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

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

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

}
finally
{
     if (oConnection.State != ConnectionState.Closed)
     {
         oConnection.Close();
         oConnection.Dispose();
     }
}
Run Code Online (Sandbox Code Playgroud)

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

server=databaseserver;Database=databasename;User Id=username;Password=password;Max Pool Size=600;Min Pool Size=50;Connection Timeout=180;Pooling=true
Run Code Online (Sandbox Code Playgroud)

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

有谁知道怎么可能?我得到的例外是池上没有连接,但我可以看到池没有满.

我的环境:

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

愿有人帮帮我吗?

Mah*_*aga 5

using (oConnection) {

   oConnection.Open();

   // Your code here

   // No need to explicitly close or dispose

}
Run Code Online (Sandbox Code Playgroud)