最近程序运行巨卡,通常排查方式:查看服务器网络、内存使用情况、cpu使用情况、mysql线程占用情况,查找程序本身原因。
而查看mysql的情况则用到:SHOW PROCESSLIST
SHOW PROCESSLIST/SHOW FULL PROCESSLIST
SHOW PROCESSLIST:显示哪些线程正在运行
如果您有root权限,您可以看到所有线程。否则,您只能看到登录的用户自己的线程,通常只会显示100条如果想看跟多的可以使用full修饰(show full processlist)
- id #ID标识,要kill一个语句的时候很有用
- use #当前连接用户
- host #显示这个连接从哪个ip的哪个端口上发出
- db #数据库名
- command #连接状态,一般是休眠(sleep),查询(query),连接(connect)
- time #连接持续时间,单位是秒
- state #显示当前sql语句的状态
- info #显示这个sql语句
常用的几条sql
1:根据客户ip分组,查看哪个客户端的链接数量最多
select client_ip,count(client_ip) as client_num from (select substring_index(host,‘:‘ ,1) as client_ip from information_schema.processlist ) as connect_info group by client_ip order by client_num desc;
2:查看正在执行的线程,并按 Time 倒排序,看看有没有执行时间特别长的线程
select * from information_schema.processlist where Command != ‘Sleep‘ order by Time desc;
3:找出所有执行时间超过 5 分钟的线程,拼凑出 kill 语句,方便后面查杀 (此处 60秒 可根据自己的需要调整SQL)可复制查询结果到控制台,直接执行,杀死堵塞进程
select concat(‘kill ‘, id, ‘;‘) from information_schema.processlist where Command != ‘Sleep‘ and Time > 60 order by Time desc;