一、问题背景
Linux服务器CPU占用极高,经过排查,是mysqld占用了大部分的CPU资源。需要进一步排查是什么原因导致mysqld占用飙升。
因当前并没有大量正在执行的业务,所以初步排除业务量过大导致的Mysql资源飙升。
二、原因
Mysql服务端中可能运行少数的某几个会话,这几个会话可能存在性能问题,导致资源占用消耗巨大。
三、排查
3.1 查看运行的会话数
SHOW PROCESSLIST;
可以看到,目前处于excuting状态的会话有四个。
3.2 查看会话具体内容
select * from performance_schema.threads;
这个命令会列出各个会话的具体信息,包括线程ID、名称、具体的会话语句、所属用户等等信息。
根据图1中四个会话的ID(蓝色部分),在当前输出的结果中找到具体的会话语句(蓝色部分)。
发现这四个会话都在执行同一条语句,这条语句的存在子查询,且进行了联表查询。根本原因是这条sql语句有误,导致查询陷入死循环,迟迟无法结束。
四、处理
4.1 临时处理方案
将这四条耗费极大资源的会话暂时关闭,即可临时解决mysql占用大的问题。
kill <会话ID>;
注:会话ID即图1中圈蓝色框框的数字。
但如果某些业务再次调用了该sql,那么资源占用将会再次飙升。
4.2 根本解决方案
根本方法便是对sql进行优化,具体优化方式在此处不做展开。
原创内容,引用请注明出处。