云数据库RDS

    CPU报警处理方法

    背景

    CPU占用率监控RDS实例的CPU使用情况。当CPU占用率高时,说明数据库压力大,通常会导致如下现象:

    • 数据库响应变慢,SQL执行耗时变长,导致请求超时
    • 数据库读和写的QPS降低

    百度RDS数据库采集了CPU占用率的监控项,CPU占用率监控是默认添加的报警策略,默认当CPU占用率大于95%时会触发报警,用户可以根据自身情况调整报警阈值。

    本文重点讲解存在CPU占用率监控报警的情况下,如何应对和处理。

    参考资料:《监控报警操作指南》 参考资料:《MySQL慢日志最佳实践》

    问题处理过程

    问题发现

    CPU占用率问题的发现渠道有如下几种:

    1. 触发CPU占用率报警的报警阈值,会发送报警信息
    2. 查看RDS监控趋势图,观察CPU占用率的曲线,如下图例
    3. 访问数据库过程中发现耗时增加,数据库响应能力下降,可能是存在CPU利用率异常,数据库响应时间变长

    image.png

    问题定位

    • 第一步:使用数据库账号登录RDS实例,执行如下命令,查看当前进程状态,是否存在预期中的长耗时SQL:
    SHOW PROCESSLIST;

    举例:得到结果如下

    | 10001 | baidu_dw | 127.0.0.1:39640 | baidu_dba | Query | 163 | Sending data | select t1.id,t1.data, t2.id,t2.data from tb_01 t1,tb_02 t2 where ... |
    | 10002 | baidu_dw | 127.0.0.1:39646 | baidu_dba | Query | 158 | Sending data | select t1.id,t1.data, t2.id,t2.data from tb_01 t1,tb_02 t2 where ... |
    | 10003 | baidu_dw | 127.0.0.1:39652 | baidu_dba | Query | 153 | Sending data | select t1.id,t1.data, t2.id,t2.data from tb_01 t1,tb_02 t2 where ... |
    | 10004 | baidu_dw | 127.0.0.1:39728 | baidu_dba | Query | 88  | Sending data | select t1.id,t1.data, t2.id,t2.data from tb_01 t1,tb_02 t2 where ... |
    | 10005 | baidu_dw | 192.168.0.69:39766 | baidu_dba | Sleep | 6 |
    • 第二步:分析 通过当前 processlist 展示结果,可以看到有4个长耗时的慢SQL,导致了CPU占用率报警

    问题解决

    首先需要确认这些慢查询是否可以终止,如果可以终止,登录RDS执行KILL命令:

    KILL threadID;

    这时客户端会收到报错信息如下,这是符合预期的:

    ERROR 2006 (HY000): MySQL server has gone away 

    如上例,观察监控趋势图:CPU占用率恢复正常

    image.png

    上一篇
    大事务报警处理方法
    下一篇
    慢查询报警处理方法