AWS Aurora连接数指标与实际状态不符问题排查求助
AWS Aurora连接数指标与实际查询差异的问题解答
为啥CloudWatch指标和SHOW PROCESSLIST结果不一样?
- CloudWatch的
DatabaseConnections统计的是数据库上所有已建立的连接总数,包括:- 应用连接池里的空闲Sleep连接
- Aurora内部的系统连接(比如复制、监控用的)
- 正在处理请求的活跃业务连接
- 而
SHOW PROCESSLIST默认只显示正在干活的活跃连接,要看到所有连接(包括空闲的),得用SHOW FULL PROCESSLIST;,跑这个命令后你会看到一堆Sleep状态的连接,总数就和CloudWatch的数值对上了。
连接数的规模正常吗?
结合你的TypeORM配置来看:
- 你设了
poolSize:10,这是单个连接池的最大连接数。因为开了主从复制,每个微服务会分别为主库、从库各建一个连接池,单微服务最多占10+10=20个连接 - 3个微服务的话,理论上限是
3*20=60,和你看到的50左右的连接数完全吻合 - 高负载时涨到200-300,得排查这几点:
- 是不是每个微服务部署了多个实例?比如每个微服务有5个实例,总连接数就是
5*3*20=300,这属于合理范围 - 有没有连接泄漏?比如应用代码里没正确释放连接,导致空闲连接一直堆着没回收
- 是不是驱动/ORM有动态扩容连接池的逻辑?有些配置会在高负载时临时增加连接数
- 是不是每个微服务部署了多个实例?比如每个微服务有5个实例,总连接数就是
配置上要注意啥?
- 加个连接池空闲超时配置(比如TypeORM里的
idleTimeoutMillis),让连接池自动回收长时间不用的空闲连接,避免连接数一直涨 - 分别监控主实例和读实例的
DatabaseConnections指标,看看连接是不是合理分配到了主从节点,避免某一个实例连接过载 - 检查应用代码里的连接使用逻辑,确保每次用完连接都正确释放(比如用try/finally包裹,或者用ORM的自动管理机制)
内容的提问来源于stack exchange,提问作者Loki
相关产品推荐
相关产品推荐

