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

AWS RDS MySQL高并发请求下连接超时问题排查求助

问题描述

我正在开发一款基于AWS RDS(MySQL)的Web应用,当并发请求为10-20时运行正常,但将并发提升至100-200时,RDS无法及时响应,应用抛出如下错误:

MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.
 ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at MySql.Data.Common.StreamCreator.GetTcpStream(MySqlConnectionStringBuilder settings)
   at MySql.Data.MySqlClient.NativeDriver.Open()
   at MySql.Data.MySqlClient.NativeDriver.Open()
   at MySql.Data.MySqlClient.Driver.Open()
   at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
   at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
   at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
   at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
   at MySql.Data.MySqlClient.MySqlPool.GetConnection()
   at MySql.Data.MySqlClient.MySqlConnection.Open()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider._TrackEntities[TOut,TIn](IEnumerable`1 results, QueryContext queryContext, IList`1 entityTrackingInfos, IList`1 entityAccessors)+MoveNext()
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)

同时查看RDS集群或数据库监控时,未发现CPU使用率飙升或连接异常情况。

【2022年10月31日12:30更新】在数据库性能洞察中发现关键图表:图表展示了连接数及连接等待时间,高并发场景下连接等待时间出现大幅飙升。

排查方向
  • 连接池配置验证
    检查应用侧的数据库连接池参数:

    • 确认Maximum Pool Size(最大连接池大小)是否设置合理,默认值通常为100,当并发请求达200时,连接池可能无法及时提供足够连接,导致等待超时。
    • 检查Connection Timeout(连接超时时间)设置,若超时时间过短,高并发下获取连接的等待时间超过阈值就会抛出错误。
    • 验证Min Pool Size(最小连接池大小),是否在应用启动时就初始化了足够的连接,避免高并发时临时创建连接的开销。
  • RDS连接限制与排队机制

    • 查看RDS实例的max_connections参数值,确认当前并发连接数是否接近或达到该上限。即使监控显示“连接异常”不明显,也可能存在连接排队等待的情况(对应性能洞察中连接等待时间飙升的现象)。
    • 检查RDS的connection_timeout和wait_timeout参数,确认是否有连接被过早回收,导致应用频繁重新建立连接,加剧连接竞争。
  • 网络层面排查

    • 检查AWS VPC内的网络带宽、延迟情况,高并发下网络吞吐量是否达到瓶颈,可通过CloudWatch监控RDS的NetworkReceiveThroughput和NetworkTransmitThroughput指标。
    • 验证安全组、NACL规则是否存在限制,高并发下是否有数据包被丢弃的情况。
    • 若应用与RDS不在同一VPC,检查专线或VPN的带宽是否足够,跨区域访问的延迟是否过高。
  • 查询性能与锁等待

    • 虽然CPU未飙升,但可能存在慢查询或锁等待导致连接被占用,无法及时释放。通过Performance Insights查看是否有高等待事件(如wait/io/table/sql/handler、lock/table/metadata等)。
    • 开启MySQL的慢查询日志,捕获高并发下执行时间较长的SQL,分析是否存在未优化的查询(如缺少索引、全表扫描)。
    • 检查是否有长事务,事务未及时提交会占用连接资源,导致连接池耗尽。
  • RDS实例资源瓶颈

    • 除CPU外,检查内存使用率(FreeableMemory),若内存不足导致频繁换页,会影响数据库响应速度。
    • 查看磁盘IO指标(DiskQueueDepth、ReadLatency、WriteLatency),高并发下磁盘IO是否达到瓶颈,尤其是使用GP2磁盘的实例,IOPS可能不足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:46:07