接口一慢就扩容,多半扩错了地方

举报
yd_278382871 发表于 2026/11/07 23:44:31 2026/11/07
【摘要】 扩容是所有止血手段里最快的一个,所以它经常被用在还没查清楚的时候。连接池打满时加两台机器,效果通常是把排队从一台机器挪到两台机器。一、先分清是「池满」还是「库慢」大多数「连接池不够」的判断,是从监控上看到活跃连接数接近上限得出的。这个数字只说明在忙,不说明不够用。看等待,不只看活跃:活跃连接高是常态,获取连接的等待时长高才是真信号。前者说明在干活,后者说明在排队。把两段时间拆开:一次请求的耗...

扩容是所有止血手段里最快的一个,所以它经常被用在还没查清楚的时候。连接池打满时加两台机器,效果通常是把排队从一台机器挪到两台机器。

一、先分清是「池满」还是「库慢」

大多数「连接池不够」的判断,是从监控上看到活跃连接数接近上限得出的。这个数字只说明在忙,不说明不够用。

  • 看等待,不只看活跃:活跃连接高是常态,获取连接的等待时长高才是真信号。前者说明在干活,后者说明在排队。
  • 把两段时间拆开:一次请求的耗时 = 等连接 + 执行 SQL + 业务处理。比例拿不出来,后面所有优化都是猜。
  • 池大不等于快:池开到 200 而库只能并发跑 50,多出来的 150 个连接只是在数据库里排队,还会把库压得更慢。
判据:慢的时候,能说出等连接与执行 SQL 各占多少时间。

二、池的大小由下游倒推,不由应用拍

连接池的上限不是应用自己的参数,它是数据库并发预算的一部分。

  • 从库的上限往回算:按实例的最大连接数留出运维、批处理、迁移的口子,业务可用部分取七成左右。
  • 算总量而不是单实例:总连接数 = 单实例池大小 × 实例数。滚动发布、弹性扩容期间会短暂翻倍,预算要按最坏情况算。
  • 连接复用优先于加连接:短连接改长连接、合理设置空闲回收,比把 max-active 调大有效得多。
判据:实例数翻倍时,总连接数仍在库上限的七成以内。

三、多数「池不够」,其实是没还

连接泄漏的形态很稳定:曲线只涨不落。它往往不是忘了 close,而是被别的东西占住了。

  • 事务里做远程调用:一次 HTTP 或消息发送几百毫秒,连接就被一直占着。事务边界要包住 SQL,不要包住网络。
  • 长事务:批量任务、导出、后台补偿,跑得越久占用越久,池再大也会被吃满。
  • 异常路径没兜住:try 里拿到连接、catch 里没归还,平时看不出来,一出错就开始漏。
判据:压测一轮结束后,活跃连接数能回到基线,而不是停在高位。

落到华为云上:连接数上限与参数调整在云数据库 RDS for MySQL / TaurusDB 的参数组里看,改之前先确认实例规格对应的上限;会话与慢 SQL 用数据管理服务 DAS 直接看当前连接在跑什么;等连接的时间从应用性能管理 APM 的调用链里拆;容器侧按实例数核对池配置用云容器引擎 CCE 的工作负载参数;弹性伸缩的触发条件建议挂连接等待或 P99,而不是 CPU。

一张表收尾

症状 通常是 先补这个
扩容后仍然慢 瓶颈在库,不在应用 看库侧并发与慢 SQL
活跃连接只涨不落 连接没还 查事务里的远程调用与异常路径
高峰期大量等连接 池小于真实并发 按库上限倒推池大小
实例一多库就告警 池大小 × 实例数超上限 做全局连接预算

参考

  • 华为云 · 云数据库 RDS for MySQL
  • 华为云 · 云数据库 TaurusDB
  • 华为云 · 数据管理服务 DAS
  • 华为云 · 应用性能管理 APM
  • 华为云 · 云容器引擎 CCE
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。