ASP.NET Core Web API连接Azure SQL数据库间歇性超时问题排查
排查方向
一、连接池与EF Core连接配置排查
- 确认连接字符串中的
Connect Timeout(或Connection Timeout)是否设置为60秒,避免代码层面的超时配置被连接字符串覆盖。 - 监控连接池实际运行指标:通过
Microsoft.Extensions.Diagnostics.HealthChecks添加SQL连接池健康检查,跟踪卡顿发生时的ActiveConnections、IdleConnections、WaitCount数据,排查是否存在连接泄漏或连接池等待队列异常(即便连接池上限设为3000,仍可能因未及时归还连接导致阻塞)。 - 核查EF Core上下文生命周期:确保上下文采用
Scoped模式注入,避免单例服务中误用Scoped上下文导致连接长期占用未释放。
二、Azure网络层面排查
- 测试App Service到Azure SQL的网络稳定性:在Kudu控制台定期执行
ping或tracert命令指向SQL服务器地址,记录卡顿时段的延迟、丢包数据,确认是否存在突发网络波动。 - 调整连接字符串参数测试:添加
TransparentNetworkIPResolution=True让客户端自动选择最优SQL服务器IP;验证Encrypt=True;TrustServerCertificate=False配置是否正常,排查加密握手阶段的延迟问题;尝试切换MultipleActiveResultSets的开启状态,对比卡顿情况。 - 查看Azure服务健康状态:检查App Service与Azure SQL所在区域的服务健康页面,确认卡顿时段是否存在网络维护或异常事件。
三、App Service运行环境排查
- 监控实例资源使用率:跟踪App Service的CPU、内存、磁盘IO指标,确认卡顿发生时是否存在资源耗尽(比如CPU突高导致无法处理网络握手请求);多实例部署场景下,排查是否特定实例出现异常,可尝试重启异常实例验证。
- 分析进程内阻塞情况:通过Application Insights的性能分析工具,查看卡顿请求的调用栈,确认是否在预登录握手前存在线程池耗尽、同步调用阻塞等问题。
- 检查.NET Core线程池配置:确认
ThreadPool.SetMinThreads设置是否合理,避免因线程池不足导致网络IO操作无法及时处理。
四、数据库侧补充排查
- 启用SQL预登录日志:在Azure SQL诊断设置中开启
SQLSecurityAuditEvents日志,查看卡顿时段预登录阶段的身份验证、证书验证等细节,排查隐藏的握手异常。 - 对比原始连接测试:新增简单测试接口,使用原生
SqlConnection而非EF Core连接数据库,对比两者的卡顿表现,定位是否为EF Core封装层导致的问题。
内容的提问来源于stack exchange,提问作者matt sharp
相关产品推荐
相关产品推荐

