You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6升级后连接AWS MySQL RDS出现调用挂起/超时问题求助

.NET 6+EF Core 6.0.9连接AWS RDS MySQL 5.7挂起问题排查思路

连接字符串与版本配置优化

  • 替换ServerVersion.AutoDetect(connStr)为显式指定版本:new MySqlServerVersion(new Version(5,7,12)),避免RDS环境下版本自动检测的偏差
  • 强制添加连接池与超时参数到连接字符串:
    Max Pool Size=100;Min Pool Size=5;Connection Timeout=30;Connection Lifetime=180;SslMode=Required
    
    其中SslMode=Required是AWS RDS的强制要求,升级后的MySqlConnector对SSL校验更严格;连接池参数可排查连接耗尽或回收异常
  • 临时添加Compress=false关闭连接压缩,排除RDS对压缩协议的兼容性问题

EF Core上下文与重试策略调整

  • 显式配置上下文生命周期:由于仓储是Transient,可尝试将上下文改为Transient(仅排查用):
    services.AddDbContext<LoggingDbContextAdapter>(optionsBuilder => {
        // 原有配置
    }, ServiceLifetime.Transient);
    
  • 禁用EF Core的自动重试:在UseMySql的配置中添加.RetryOnFailure(0),排除0ms间隔的无限重试导致的挂起
  • 开启Debug级日志排查连接流程:
    optionsBuilder.LogTo(Console.WriteLine, LogLevel.Debug)
                  .EnableSensitiveDataLogging();
    
    重点观察第二次调用时的连接获取、释放日志,确认是否有连接被占用未归还

MySqlConnector版本验证

  • 确认MySqlConnector版本与EF Core 6.0.9兼容(推荐2.2.6~2.2.10版本),若当前版本过高,尝试降级到该区间;若过低则升级到最新兼容版
  • 可临时切换到Pomelo.EntityFrameworkCore.MySql的稳定版本对比测试,排除组件本身的隐性bug

RDS与网络侧验证

  • 登录RDS执行show processlist;,查看连接状态,确认是否有大量Sleep连接未释放,或连接数达到实例上限
  • 添加TcpKeepAlive=60到连接字符串,保持TCP连接活跃,避免.NET 6的TCP参数变化导致连接被RDS主动断开

内容的提问来源于stack exchange,提问作者Ralph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:55:20