更新时间:2026-07-17 GMT+08:00
分享

RDS for MySQL CPU过载定位及处理建议

场景介绍

CPU过载的典型表现为数据库实例的CPU使用率在短时间内(几十秒到几分钟)从正常水平迅速飙升至100%,导致数据库连接卡死、请求超时、服务不可用。本文针对此类CPU峰值场景,分析常见原因并提供处理建议。

可能原因

  • 慢SQL过多且大量并发执行

    在短时间内,大量并发执行一个或多个执行效率低的SQL语句(例如未命中索引的多表JOIN、缺少LIMIT的全表扫描、对大数据量的排序或分组操作),每条SQL都会消耗大量CPU时间,导致并发量上升后CPU迅速占满。

    典型特征:慢查询日志中同一类SQL在冲顶时间点大量出现。执行 show processlist 中看到多个相同SQL处于Sending data、Copying to tmp table等状态。

  • 索引设计不合理或索引失效导致突发全表扫描

    原本能够正常使用索引的SQL语句,因以下原因突然变为全表扫描,单次执行成本增加数个数量级:

    • 表结构变更(如新增字段导致原有索引不再最优)。
    • 统计信息陈旧,优化器选择了错误执行计划。
    • WHERE条件中对索引列使用函数、隐式类型转换或字符集不一致。
    • 大量更新后索引碎片严重。

    当这类SQL的并发数较高时,全表扫描导致的CPU资源消耗会瞬间达到峰值。

    验证方法:使用 EXPLAIN 查看冲顶时刻的SQL执行计划,关注 type=ALL 或 key=NULL 。

  • 业务流量瞬间峰值

    在促销活动、热点事件、缓存穿透等场景下,业务请求量在数秒内激增数倍甚至数十倍,导致数据库连接数随之急剧上升。虽然每条SQL本身执行效率较高,但因并发度过高,CPU仍会被占满。

    典型特征:

    • 在流量冲顶的时间点,QPS监控曲线出现急剧尖峰。
    • 活跃连接数出现急剧的峰值。
    • 在慢查询日志中未发现明显的异常SQL(扫描行数过高、磁盘排序等),部分高效SQL变慢。

对业务的影响

CPU冲顶对业务的影响如下:

  • 导致数据库处理能力骤降,所有SQL执行延迟急剧增加。
  • 新建连接请求超时,已有连接出现卡死现象。
  • 严重时数据库处于假死状态,业务完全中断。

处理建议

  • 出现过载异常前的建议:
    • 定期分析慢SQL:使用华为云DAS的慢SQL分析功能,提前发现潜在的低效SQL并优化。
    • 配置CPU、活跃连接数告警:建议针对生产实例,配置CPU 70% 时连续五次告警、活跃连接数大于CPU核心数*3 时连续五次告警。
    • 开启全量SQL审计:通过SQL审计记录所有执行语句,便于事后快速定位问题SQL。
    • 合理设置连接池上限:根据实例规格配置应用连接池的maximumPoolSize,避免连接数超过数据库承载能力。
    • 上线前SQL审核:使用DAS的SQL诊断工具对新SQL进行执行计划分析,确保命中索引。
  • 过载异常中的建议:
    • 方法一:SQL限流(推荐首选)

      当CPU冲顶由特定SQL模式引起时,使用华为云RDS for MySQL的SQL限流功能快速切断问题源。通过设置关键字和最大并发数,当匹配的SQL并发超过阈值时自动拒绝执行。

    • 方法二:自治限流(自动过载保护)

      配置自治限流,设定CPU阈值(如 ≥95%)、活跃会话数、持续时间等条件,系统自动触发限流,无需人工介入。适用于流量突发不可预测、无法快速定位 SQL 的场景。需要注意的是,自治限流为轮询查杀会话的逻辑实现方式,针对异常流量或低效SQL存在重试的场景作用有限。

    • 方法三:Kill 异常会话

      紧急情况下,通过 show full processlist 定位消耗CPU较高的会话(状态为Sending data、Copying to tmp table等),执行 kill <会话ID> 直接终止。可在实时会话页面批量操作。

    • 方法四:临时升级规格或开启读写分离

      升级CPU规格:若业务量持续增长,通过变更规格提升实例处理能力。

      添加只读实例:使用数据库代理将查询流量分流到只读实例,减轻主库压力。

  • 过载异常后的复盘优化:
    • 关联慢日志与监控:在实例监控中查看CPU冲顶时间点的慢SQL数量、慢日志详情等,定位高消耗SQL。
    • 使用DAS进行SQL优化:将问题SQL导入DAS SQL诊断,获取索引建议和重写方案。
    • 分析索引使用情况:检查冲顶时刻的慢SQL是否因索引失效导致全表扫描,必要时使用 OPTIMIZE TABLE 重建索引或更新统计信息。
    • 清理SQL限流规则:限流规则过多会影响性能,事后及时删除不再需要的规则。
    • 评估业务流量模型:若频繁出现业务峰值,考虑接入读写分离或使用分布式数据库中间件 DDM进行水平扩展。

相关文档