目录
记录MySql过多占用CPU资源的排查过程及解决方案
场景
1、需要对项目的接口进行压力测试
2、大部分接口压测是正常的
3、只有部分接口压测时MySql对CPU的占用达到90%
压测
压测线程数:30个
压测时间:1分钟
MySql对CPU的占用:92%
排查
一、是不是数据库链接不够用导致的
1、 使用“show full processlist”命令查看链接的使用情况
1.1、调整数据库链接池的连接数,将链接数配置多一些
1.2、再次使用“show full processlist”命令查看链接的使用情况
结果:依然没有空闲的链接
再次压测:CPU占用依然达到90%
二、压测时MySql的CPU占用过高,一般都是先进行SQL慢查询,再进行索引优化
1、使用“EXPLAIN”进行慢查询,检查sql脚本是否走了索引
检查结果:SQL脚本执行时,有一些表没走索引,导致全表扫描,影响效率
2、 为什么有索引却没有走索引
3、 进行调整,让sql在查询时走索引
4、 进行索引优化后,再次进行压测,压测时传递BeginTime和EndTIme的日期范围为一个月
第1次压测:
压测用户数:100
压测时间:1分钟
压测时Mysql对CPU的使用率:70%
第2次压测:
压测用户数:200
压测时间:1分钟
压测时Mysql对CPU的使用率:70%
结果:算是比之前好很多
原因
控制器接口执行的SQL语句,是走全表扫描,没有走索引
解决
对SQL进行索引优化
补充:MySql对CPU占用过高的原因
1、MySql服务器本身的配置问题
2、服务器硬件的问题
3、业务代码的问题
4、SQL脚本的问题
补充:MySql对CPU占用过高的场景
例如:除了接口基本的业务会访问数据库,后续可能还有一些统一的操作会访问数据库
1、接口业务处理结束后,插入操作日志
2、在用户登录成功后,插入登录日志
3、在用户访问接口时,插入系统日志