You need to enable JavaScript to run this app. 生产环境突发SQL Server连接池耗尽引发会话数据库连接异常排查
优惠活动
大模型
产品
解决方案
定价
更多

生产环境突发SQL Server连接池耗尽引发会话数据库连接异常排查

生产环境SQL Server连接池超时异常排查记录

生产异常表现

生产环境稳定运行期间,日志突然捕获多层级异常堆栈,核心异常类型包括:

  • System.Web.HttpException (0x80004005):触发类型为System.Web.HttpException的异常
  • 关联业务异常:System.Web.HttpException (0x80004005):无法连接到SQL Server会话数据库
  • 底层核心异常:System.InvalidOperationException:从连接池获取连接时超时,通常由池内所有连接被占用、达到最大连接池阈值引发

排查初始认知与方向

排查初期参考同类问题的通用解法,首先判定常规数据库调用代码不存在连接泄漏问题,拒绝仅通过将最大连接池阈值上调至200的临时方式规避问题,目标定位突发异常的根本诱因。
当前生产环境的数据库连接字符串分两类配置,两类均启用MultipleActiveResultSets=True参数:

  • NHibernate 框架对应的数据库连接配置
  • Entity Framework 框架对应的数据库连接配置

初步校验的无泄漏场景

排查初期首先对照数据库调用的规范写法,确认以下场景的代码不存在连接泄漏问题:

  • 所有通过using语句包裹DbContext实例、数据库连接对象的代码
  • 手动打开连接后通过DataReader读取多组结果集、操作完成后显式关闭连接的代码

最终定位的根因

经全链路代码走查,最终确认Entity Framework调用链路存在隐蔽的连接泄漏问题,具体问题点:

  • 部分业务代码未使用using语句管理DbContext生命周期,典型问题写法是将DbContext定义为类级别的私有实例直接开展查询操作,未及时释放对应的数据库连接资源
  • 这类未做资源释放的查询逻辑,单次执行就会触发超过100次数据库调用,会在短时间内快速耗尽连接池容量,最终引发连接获取超时异常

内容的提问来源于stack exchange,提问作者Ben.S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 01:54:03