mysql优化 SHOW PROCESSLIST命令详解

最近程序运行巨卡,通常排查方式:查看服务器网络、内存使用情况、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;

 

原文地址:https://www.cnblogs.com/1439107348s/p/14267112.html