RDS扩容时.NET API数据库连接错误排查求助
问题描述
我们有部署在ECS上的.NET API,通过Entity Framework Core从Aurora PostgreSQL Serverless v1集群查询数据。正常负载下服务运行正常,但流量激增触发RDS集群扩容(增加ACU)时,API会出现大量连接错误:
An error occurred using the connection to database '"ourdatabasename"' on server '"tcp://ourcluster.region.rds.amazonaws.com:5432"'
基础设施架构
CloudFront >> Load Balancer >> ECS Fargate >> RDS Aurora PostgreSQL Serverless v1
技术栈
-.NET 6 API(Linux编译版本)
-Entity Framework Core 6.x
-Npgsql.EntityFrameworkCore.PostgreSQL 6.x
-PostgreSQL 10.18
我们通过k6压力测试(绕过CloudFront缓存)可稳定复现问题,只要触发RDS集群扩容就会出现错误。AWS支持工单回复称这是实现问题而非基础设施问题。过去一年我们通过将RDS配置为几乎无需扩容的高容量来规避,但这会浪费成本,违背Serverless设计初衷,因此需要找到根本原因并解决。
已尝试的解决方案
- 测试Serverless v2:扩容机制不同(同一VM占用更多主机资源),但问题更严重——v1在约400请求/秒时出错,v2仅150请求/秒就触发错误。
- 启用
EnableRetryOnFailure:略有帮助但效果有限,目前保留Npgsql默认配置。 - 调整连接字符串的
Maximum Pool Size参数:设为300时情况略有改善,但未彻底解决问题。 - 调整ECS/ALB扩容策略或预扩容:无任何改善。
未尝试的方案
- RDS Proxy:据称可解决连接池问题,但不确定是否为连接池导致的问题,且不愿依赖额外黑盒服务、成本较高,若社区普遍推荐则会尝试。
- RDS Data API:无需管理连接,但需重写所有EF代码,且Serverless v2暂不支持,暂不考虑。
求助需求
希望明确问题根源、错误来源,制定故障转移机制或实现系统优雅降级。如有可行的配置方案也欢迎提供,后续会将问题原因分享给社区。可补充更多信息。
内容的提问来源于stack exchange,提问作者Martijn Kooij
相关产品推荐
相关产品推荐

