处理mysql cup飙升问题

当遇到MySQL数据库CPU使用率达到80%,可能是由于慢查询导致。DBA首先需要记录并杀死运行慢的SQL。本文介绍了如何使用pt-kill工具、show processlist命令以及分析MySQL慢日志来定位和解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

紧急处理:
运行平稳的数据库,如果遇到CPU狂飙,到80%左右,那一定是开发写的烂SQL导致的,DBA首先要保证的是,数据库别跑挂了,所以我们要把那些运行慢的SQL杀死并记录到文件里,以便后面的排查。

pt-kill  --match-info "^(select|SELECT)"--busy-time 3--victim all --interval 1--kill --print --daemonize > /root/kill.txt

pt工具安装
pt-kill详解
这条命令是只把select耗时3秒以上的SQL全部杀死,并打印出来

模拟测试:
在这里插入图片描述在这里插入图片描述
也可以通过show processlist;命令详细排查:
1.通过top命令查询服务器cup占用情况
在这里插入图片描述
我们看到cup占用率已经达到199.7%(服务器是双核)
2.执行 mysql -u root -p 进入mysql,输入show full processlist; 查看正在连接mysql的线程
show processlist详解
在这里插入图片描述
我们看到这个sql是导致mysql数据库飙升的原因
3.杀死这些占用资源的烂sql
kill 504;
kill 509;

通过mysql慢日志分析:
1、查看mysql日志记录是否开启:show variables like ‘slow_query_log’;
在这里插入图片描述
没开启的话先开启日志记录: set global slow_query_log = on;

2、查看记录慢sql的时间:show global variables like ‘long_query_time’;
在这里插入图片描述
默认是10秒,可以根据需要修改,这里修改为执行时间超过3秒的sql被记录:

set global long_query_time =3;

3、查看日志存放位置:show variables like ‘slow_query_log_file’;
在这里插入图片描述
4、查看日志: cat /data/mysql/XXX/long.log

# Time: 170104 10:41:04
# User@Host: root[root] @  [127.0.0.1]  Id: 785264
# Query_time
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值