cpu负载时如何排查mysql的进程,并停止相关进程
当服务器cpu负载时,先执行 top 命令,若查看mysqld 占用cpu较高,则需要进一步检查哪些mysql进程导致的,分析其原因,有效的查杀,缓解服务器的负载。
下面是几条常用的SQL。
按客户端 IP 分组,看哪个客户端的链接数最多。
SELECT client_ip, count(client_ip) AS client_num
FROM (
SELECT substring_index(host, ':', 1) AS client_ip
FROM information_schema.processlist
) connect_info
GROUP BY client_ip
ORDER BY client_num DESC;
查看正在执行的线程,并按 Time 倒序,看看有没有执行时间特别长的线程。
SELECT *
FROM information_schema.processlist
WHERE Command != 'Sleep'
ORDER BY Time DESC;
找出所有执行时间超过 5 分钟的线程,拼凑出 kill 语句,方便查杀,可以直接复制执行,终止进程。(执行时间可自行调整)
SELECT concat('kill ', id, ';')
FROM information_schema.processlist
WHERE Command != 'Sleep'
AND Time > 300
ORDER BY Time DESC;
在sql查询控制台中执行结果中的 kill 93; 杀死进程。
4. 查询线程及其相关信息
SHOW FULL PROCESSLIST;