腾讯云数据库CPU占用率过高的解决方法

腾讯云数据库CPU占用率高时,说明数据库压力大,通常会导致如下现象:

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

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

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

问题处理过程

问题发现

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

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

问题定位

  • 第一步:使用数据库账号登录腾讯云数据库实例,执行如下命令,查看当前进程状态,是否存在预期中的长耗时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占用率报警

问题解决

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

KILL threadID;

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

ERROR 2006 (HY000): MySQL server has gone away

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

标签