Postgres RDS周六连接无限增长引发Spring Boot JDBCConnectionException问题求助
故障排查方向建议
一、周期性定时任务排查(匹配每周六触发的规律)
- 排查RDS官方运维任务:确认是否开启了每周六固定时段的自动快照、增量备份、存储完整性校验、只读副本数据同步校验、参数组更新推送等默认运维操作,这类操作会突发占用大量IO资源,直接导致EBS IO余额耗尽。
- 排查数据库层自建定时任务:检查是否存在每周六触发的VACUUM FULL、全量ANALYZE、pg_dump逻辑备份、分区表维护、历史数据归档/清理、统计信息全量更新等任务,这类操作会扫描大量数据块,触发IO暴涨。
- 排查跨系统关联任务:确认是否有每周六执行的离线报表导出、大数据同步、数仓抽取、全量数据校验等外部任务直接访问主库,这类任务通常会执行大跨度查询,抢占业务IO资源。
二、SQL执行计划退化排查
- 抓取故障时段的慢查询日志,对比正常时段业务视图查询的执行计划,重点确认是否出现索引扫描退化为顺序扫描、嵌套循环连接退化为哈希连接的情况,跨5表的视图如果触发全表扫描会瞬间打满IO。
- 检查视图依赖的5张表是否存在每周六批量增删改的操作,数据量短时间突变会导致Postgres统计信息偏差,选错执行计划。
- 确认pg_stat_statements扩展是否开启,通过历史SQL统计数据定位故障时段IO消耗最高的SQL,确认是否存在未知SQL抢占资源。
三、资源配置与链路雪崩验证
- 验证预配置IOPS阈值是否足够:故障时EBS IO余额直接降为0,说明IO资源已被完全耗尽,可临时将IOPS上调至20000观察下一个周六是否复现故障,排除资源配额不足问题。
- 检查Spring Boot连接池配置:确认是否设置了合理的查询超时时间、连接回收策略,避免查询超时后连接未被正确释放,导致连接数持续暴涨打满数据库连接上限。
- 排查API重试逻辑是否存在放大效应:单次查询超时触发客户端自动重试,大量重试请求同时打向数据库会进一步拉高IO压力,形成“查询超时→重试→IO更紧张→更多超时”的恶性循环。
四、RDS底层异常排查
- 通过AWS控制台查询故障时段RDS是否存在可用区切换、实例故障转移、存储层性能降级记录,AWS EBS同可用区多租户资源抢占也可能导致突发IO能力下降。
- 核对RDS事件日志,确认故障时段是否存在报错、预警信息,辅助定位底层问题。
内容的提问来源于stack exchange,提问作者PainIsAMaster
相关产品推荐
相关产品推荐

