我想弄清楚与ADO.NET连接池相关的生产环境中异常数量增加的原因,我可以在日志中看到很多异常这种类型: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
在性能管理,.NET数据提供程序的SQLSERVER,我可以看到“ NumberOfPooledConnections“和”NumberOfActivePooledConnections“始终低于连接字符串的最大池大小,始终在60到90个连接之间。
有没有人知道怎么可能?我得到了池中没有连接的例外情况,但是我可以看到池未满。
我的环境:
- Windows Server 2003企业SP2(近期所有斑块)
- IIS 6.0(在网页花园和应用程序池有4个工作进程每60分钟循环)
- SQL服务器2005
有人能帮帮我吗?
嗨Mahesh Velaga,我明白你的观点,但是,传感器显示的连接字符串的最大池大小是否正确? – user520488 2010-11-25 19:59:42