MySQL调优学习-快速获取占用CPU较高的SQL语句
背景
早上突然发现一个MySQL数据库的CPU使用率居高
因为是一个混布的环境上面还有一个redis
怕影响业务就上去像查看一下具体是何种原因导致的速度慢
因为实发突然,并没有mysql em 等工具
所以从网上学到了一个方法进行简单学习与验证.
https://blog.csdn.net/qq_28721869/article/details/115820752
学习过程
ssh 到高CPU的数据库服务器
top 输入 P 查看最高的是MySQL的进程.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1644407 mysql 20 0 26.3g 14.6g 39872 S 399.0 64.7 2693:35 mysqld
然后输入 PID为第一步查询出来的PID信息
top -Hp 1644407
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2066704 mysql 20 0 26.3g 14.6g 39872 R 20.3 64.6 7:21.32 connection
2066836 mysql 20 0 26.3g 14.6g 39872 R 20.3 64.6 7:41.53 connection
1884703 mysql 20 0 26.3g 14.6g 39872 R 20.0 64.6 20:22.51 connection
2029584 mysql 20 0 26.3g 14.6g 39872 R 20.0 64.6 7:21.81 connection
2039926 mysql 20 0 26.3g 14.6g 39872 R 20.0 64.6 7:19.38 connection
2044950 mysql 20 0 26.3g 14.6g 39872 R 20.0 64.6 7:21.09 connection
2045032 mysql 20 0 26.3g 14.6g 39872 R 20.0 64.6 7:41.30 connection
2066656 mysql 20 0 26.3g 14.6g 39872 R 20.0 64.6 7:38.89 connection
2066713 mysql 20 0 26.3g 14.6g 39872 R 20.0 64.6 7:40.71 connection
2066803 mysql 20 0 26.3g 14.6g 39872 R 20.0 64.6 7:21.77 connection
2078251 mysql 20 0 26.3g 14.6g 39872 R 20.0 64.6 7:30.40 connection
2078880 mysql 20 0 26.3g 14.6g 39872 R 20.0 64.6 7:19.57 connection
1883812 mysql 20 0 26.3g 14.6g 39872 R 19.7 64.6 13:26.13 connection
因为平均CPU使用率是 20% 所以充分怀疑进程已经至少存在了 30个小时左右
可以使用 sar -f /var/log/sa/sa01 的方式查看CPU的近期使用率.
根据pid 查看具体的 SQL语句
将pid 保存进 1.txt 然后使用如下方式进行处理.
for i in `cat 1.txt` ; do echo -n "$i ,"; done
执行SQL为:
SELECT
b.HOST,
b.db,
b.USER,
a.THREAD_OS_ID "os_id",
b.id "processlist_id",
b.command,
b.time,
b.state,
a.PROCESSLIST_INFO,
b.info "sql"
FROM
PERFORMANCE_SCHEMA.threads a,
information_schema.PROCESSLIST b
WHERE
b.id = a.processlist_id
AND a.THREAD_OS_ID in (2066704 ,2066836)
查询效果为
查看进程开始的时间
ps -T -eo pid,tid,lstart,etime,cmd |grep $threadid |grep -v grep
需要注意 ps 默认不显示 thread 信息. 只显示 prcess的信息
需要增加 -T 参数,并且选择 tid 才会将 threads的信息展示出来进行查询
比如我这边这个的显示信息为:
1644407 2066704 Wed Nov 1 09:09:00 2023 1-00:19:11
MySQL其他学习
在作者的其他blog上面看到了 myawr工具
计划近期有时间学习一下相关内容.