一、介绍
processlist命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令。如果有SUPER权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指,当前对应的MySQL帐户运行的线程)。
二、显示方式
# 方式一
mysql> show processlist;
# 方式二
mysql> SELECT * FROM information_schema.processlist;
三、各列的含义
第一列,会话id,使用mysql>kill id;干掉它。eg:mysql>kill 83;
第二列,user列,访问的用户,这个命令就只显示你权限范围内的sql语句。
第三列,host列,显示这个语句是从哪个ip的哪个端口上发出的。
第四列,db列,显示这个进程目前连接的是哪个数据库。
第五列,command列,显示当前连接的执行的命令,一般就是休眠( sleep ),查询( query ),连接( connect )。
第六列,time列,此这个状态持续的时间,单位是秒,如果后面有语句,要小心了,说明该语句有问题。
第七列,state列,显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state只是语句执行中的某一个状态,一个sql语句,已查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成,
第八列,info列,显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。
四、注意
(*)应用最好不要使用root账户连接MySQL,root账号比其他账号多一个连接许可。如果应用使用非root用户连接数据库,当发生too many connections错误时,root帐号仍可以登录数据库查询show processlist。