关于连接池达到最大连接数的一个问题

在ASP.NET应用中,频繁访问SQL Server数据库后出现连接池达到最大连接数的错误。分析发现可能是由于未及时关闭Datareader导致连接未释放,从而耗尽连接池。通过SQL Server管理器验证了这一假设,看到大量睡眠状态的连接。解决方案包括检查并确保关闭Datareader或采用抽象类强制释放连接的方法。
摘要由CSDN通过智能技术生成

今天同事遇到一个问题,在通过asp.net页面访问若干次sql server数据库之后,会产生“不能提供更多的连接的,连接池错误...”类似错误提示,为搞定这个bug,我们研究了一下。

首先,是查找直接原因。我了解了一下,这个项目底层使用的是sqlhelper,这一层应该不会有不释放连接的问题。初步猜测是在上层使用datareader的时候,并没有及时关闭,导致每次访问都会创建一个新的连接,使得连接池装满,而且每个连接都没有释放,所以最后再无资源创建连接了。

下面想方法证实这个猜测。先模拟操作,反复访问一个可能有问题的页面大约1分钟左右,那个熟悉的错误终于又出现了,OK,下面根据这个查错。打开SQL 企业管理器,找到管理-->当前系统信息项,重起IIS服务,刷新SQL管理器系统信息---没有程序创建的连接存在,再到aspx页面,访问若干次,转到SQL进程信息,果然!多了40多个连接,都为sleeping状态。再访问多次页面,又多了许多连接。。。看来正是这样,连接池中的连接好像是没有得到释放,所以其他需要使用连接的过程必须再创建新的连接实现,因此,连接池爆满,sql server也不再提供连接了.

问题似乎找到了,下一步开始查找程序中是否有没释放连接的地方.

继续...

下面有两种解决方案,一个是检查所有上层程序,查看使用datareader的地方是否关闭,另一个是编写回收连接的类,解决反复创建连接的问题。我建议使用第一种方法,但是由于系统比较复杂,架构并不是太合理,检查起来比较困难,在纠正了几处明显错误后,还是没有根本解决问题,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值