MySQL CPU使用率飙升,我们得找出是哪个SQL语句在捣鬼。下面是一些实用的小技巧,帮助你快速定位问题。

首先,确保你能登录到MySQL服务器。如果权限不够,那这些方法可能就帮不上忙了。

第一步,找到MySQL的进程号。登录服务器,用top命令看看哪个mysqld进程的CPU占用率特别高。比如,如果进程ID是32232,记下它。

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32232 root 20 0 1443252 356688 11748 S 107.0 4.4 2:03.82 mysqld

第二步,深挖这个进程里的线程。用命令top -H -p 32232,这里32232就是刚才记下的进程ID。找到占用CPU最多的线程ID,比如32272。

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32272 root 20 0 1443252 356688 11748 R 99.7 4.4 2:25.74 mysqld

第三步,用线程ID去MySQL里查对应的SQL语句。执行一些查询命令,就能看到是哪个SQL语句在搞鬼。优化这个SQL,问题就解决了。

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=32272;

别忘了,你还可以查查线程的其他信息,比如是否用了临时表,或者有没有排序操作,这些都能帮助进一步优化。

select * from performance_schema.events_statements_current where thread_id in (select thread_id from performance_schema.threads where thread_os_id = 32272)

总结一下,这个方法能帮你快速定位那些让数据库CPU飙升的SQL语句。但记得,只在CPU告警时用这招,如果CPU已经正常了,这个方法就不管用了。简单来说,就是登录服务器,找到高CPU占用的SQL,然后优化它。搞定!