SHOW PROCESSLIST整理

S HOW PROCESSLIST语法:SHOW [FULL] PROCESSLIST
SHOW PROCESSLIST显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账户相关的线程)。
如果您不使用FULL关键词,则只显示每个查询的前100个字符。


如果您得到“too many connections”错误信息,并且想要了解正在发生的情况,本语句是非常有用的。MySQL保留一个额外的连接,让拥有SUPER权限的 账户使用,以确保管理员能够随时连接和检查系统(假设您没有把此权限给予所有的用户)。

 示例:
 mysql> show processlist
    -> \G
*************************** 1. row ***************************
     Id: 6
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: show processlist
1 row in set (0.00 sec)

 其中,
 Id:连接标识,kill的时候有用,如果要kill 掉某个正在执行的语句,直接执行kill id;
 User:显示当前用户。若为system user则表示非客户端连接线程,而是mysql自己的线程如IO线程等。
 Host:报告TCP/IP连接的主机名称,格式host_name:client_port显示这个语句是从哪个 ip 的哪个端口上发出的,可以用来追踪出问题的用户
 db:显示这个线程当前连接的是那个数据库,如果未指定则显示NULL
 Command:显示当前连接的执行的命令类别(不是具体的语句,如Sleep,query等)
 Time:当前状态持续时间,单位秒
 State:只是语句执行中的某一个状态,一个sql语句。
 Info:显示正在执行的sql语句。如果未执行任何语句则为NULL。

下面是SHOW PROCESSLIST的输出中常见的state类型:

·         Checking table : 线程正在执行(自动)表格检查。

·         Closing tables :意味着线程正在刷新更改后的表数据,并正在关闭使用过的表。这应该是一个快速的操作。如果不快,则您应该验证您的磁盘没有充满,并且磁盘没有被超负荷使用。

·         Connect Out  :连接到主服务器上的从属服务器。

·         Copying to tmp table on disk  :临时结果集合大于tmp_table_size。线程把临时表从存储器内部格式改变为磁盘模式,以节约存储器。

·         Creating tmp table  :线程正在创建一个临时表,以保持部分结果。

·         deleting from main table  :服务器正在执行多表删除的第一部分,只从第一个表中删除。

·         deleting from reference tables :服务器正在执行多表删除的第二部分,从其它表中删除匹配的行。

·         Flushing tables :线程正在执行FLUSH TABLES,并正在等待所有线程,以关闭表。

·         FULLTEXT initialization :服务器正在准备执行一个自然语言全文本搜索。

·         Killed :有人已经向线程发送了一个KILL命令。在下一次检查终止标记时,应放弃。该标记在MySQL的每个大循环中都检查,但是在有些情况下,线程终止只需要较短的时间。如果该线程被其它线程锁定,则只要其它线程接触锁定,终止操作就会生效。

·         Locked :该查询被其它查询锁定。

·         Sending data  :线程正在为SELECT语句处理行,同时正在向客户端发送数据。

·         Sorting for group :线程正在进行分类,以满足GROUP BY要求。

·         Sorting for order :线程正在进行分类,以满足ORDER BY要求。

·         Opening tables :线程正在试图打开一个表。这应该是非常快的过程,除非打开操作受到阻止。例如,一个ALTER TABLE或一个LOCK TABLE语句可以阻止打开一个表,直到语句完成为止。

·         Removing duplicates  :查询正在使用SELECT DISTINCT。使用时,在早期阶段,MySQL不能优化不同的操作。因此,MySQL要求一个额外的阶段,以便在把结果发送给客户端之前取消所有的重复行。

·         Reopen table  :线程得到一个表锁定,但是在得到锁定后被通知带下方的表结构已更改了。它已经释放了锁定,关闭了表,并试图重新打开它。

·         Repair by sorting :正在使用一个分类来创建索引。

·         Repair with keycache :正在通过关键缓存一个接一个地使用创建关键字。这比通过分类修复要慢很多。

·         Searching rows for update :线程正在进行第一阶段,以在更新之前,查找所有匹配的行。如果UPDATE正在更改用于查找相关行的索引,则必须这么做。

·         Sleeping :线程正在等待客户端,以向它发送一个新语句。

·         System lock :线程正在等待得到一个用于表的外部系统锁定。如果您没有正在使用多个正在访问同一个表的mysqld服务器,则您可以使用--skip-external-locking选项禁用系统锁定。

·         Upgrading lock  :锁升级,INSERT DELAYED管理程序正在试图得到一个表锁定,以插入行。

·         Updating :线程正在搜索行,并正在更新这些行。

·         User Lock :线程正在等待GET_LOCK()。

·         Waiting for tables :线程得到一个通知,表的底层结构已经改变,需要重新打开表以得到新的结构。但是,为了能重新打开表,必须等待,直到所有其它的线程已经关闭了正在被质询的表。

如果其它线程已经对正在被质询的表使用了FLUSH TABLES或以下语句之一:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE或OPTIMIZE TABLE;则会出现通知。

·         waiting for handler insert :INSERT DELAYED管理程序已经处理了所有处于等待状态的插入,并正在等待新插入。

多数状态对应于非常快的操作。如果一个线程在这些状态下停留了数秒,则可能是有问题,需要进行调查。

有一些其它的状态,在前面的清单中没有提及,但是其中有很多状态对于查找服务器中的程序错误是有用的。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值