龙空技术网

记一次生产环境MySQL服务器cpu飙升800%优化案例

波波说运维 1031

前言:

今天各位老铁们对“mysql cpu飙升”都比较注重,兄弟们都想要了解一些“mysql cpu飙升”的相关知识。那么小编在网上搜集了一些对于“mysql cpu飙升””的相关资讯,希望兄弟们能喜欢,看官们一起来了解一下吧!

概述

简单记录一下最近处理的生产环境MySQL服务器cpu飙升800%案例,处理还是比较简单的,仅供参考~

一、服务器CPU飙升800%触发告警

由于这里计算的是平均CPU,top表现为800%,触发zabbix告警如下:

二、检查数据库当前会话

show full processlist;
三、查看执行计划

这是必备技能~

explain SELECT    * FROM    t_ocs_employee_attendace e WHERE    e.employee_code LIKE concat( 'xxx', '%' )     AND DATE_FORMAT( e.work_date, '%Y-%m-%d' ) = DATE_FORMAT( '2020-08-26 00:00:00', '%Y-%m-%d' )

圆圈圈起来的地方是问题所在地

四、建索引并调整sql

考虑优化如下:

1、employee_code、work_date建联合索引

2、like 后面不直接跟%

3、左边的date_format函数去掉

--建索引create index idx_code_work on t_ocs_employee_attendace(employee_code,work_date)--调整sql如下:SELECT    * FROM    t_ocs_employee_attendace e    where e.employee_code LIKE concat( '207082', '%' )    and e.work_date = DATE_FORMAT( '2019-04-07 00:00:00', '%Y-%m-%d')
五、再次检查执行计划

可以发现走了索引范围扫描,代码修改对应xml文件后问题解决~

后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下~

标签: #mysql cpu飙升