CPU消耗高sql定位
以下从2个维度进行分析,一个是当前cpu高占用排查,一个是历史sql占用高排查
一.当前cpu占用高排查
1 从os资源消耗逐步到mysql查询
1.1 输入top
然后按大P 使之进程按照消耗cpu排序
比如3889为mysql进程ID,接下来再用它查询出占用CPU多的线程。
1.2 查询进程中的线程
使用如下操作系统命令
top -H -p 3889
1.3 根据线程ID去mysql查询出对应的SQL 比如1.2中看到的pid是6989
select
a.user,
a.host,
a.db,
b.thread_os_id,
b.thread_id,
a.id processlist_id,
a.command,
a.time,
a.state,
a.info
from information_schema.processlist a,
performance_schema.threads b
where
a.id = b.processlist_id
and
b.thread_os_id=6989;
即可定位到具体sql语句;其中,info列显示的SQL就是占用CPU较大的SQL,针对其进行优化即可。
二. 历史cpu高占用sql排查
1.performance_schema下视图定位
可通过performance_schema下面的视图进行跟踪查看,前提是 performance_schema = on 已经打开
show variables like 'performance_schema';
SELECT
DIGEST_TEXT,
SCHEMA_NAME,
COUNT_STAR , --执行次数
SUM_TIMER_WAIT/1e12 AS total_exec_time_sec, -- 总执行时间(秒)
AVG_TIMER_WAIT/1e12 AS avg_exec_time_sec, -- 平均执行时间(秒)
MAX_TIMER_WAIT/1e12 AS max_exec_time_sec -- 最大执行时间(秒)
FROM
performance_schema.events_statements_summary_by_digest
ORDER BY
total_exec_time_sec DESC
LIMIT 10;
2.通过slow_log.log 慢sql日志文件查看
确保慢sql记录功能开启
-- 查看当前配置
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';