MySQL -- show processlist
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL -- show processlist相关的知识,希望对你有一定的参考价值。
mysql> show full processlist 或者 mysql> show processlist; +---------+-----------+-------------------+----------+-------------+---------+------------------------+---------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +---------+-----------+-------------------+----------+-------------+---------+------------------------+---------------------------------------+ | 3672856 | abce | 192.168.5.1:38311 | abce | Query | 0 | Sending data | select count(1) from (select +---------+-----------+-------------------+----------+-------------+---------+------------------------+---------------------------------------+
说明:
ID: id标识。kill用户的时候有用 User: 当前连接的用户 Host: 当前用户连接是从哪个ip和port连接过来的 db: 数据库名 Command: 连接状态,一般是休眠(sleep),查询(query),连接(connect) Time: 连接持续的时间,单位是秒 State: 当前sql语句的状态 Info: sql语句内容
其中state的状态十分关键,下表列出state主要状态和描述:
状态 | 说明 | 建议 |
After create |
当线程创建一个表(包括临时表),创建函数结束时的状态。 |
|
Analyzing | 线程正在估算myisam表的键的分布 | |
checking permissions | 权限检查 | |
Checking table | 检查表 | |
cleaning up | 命令结束,准备释放内存和重置状态变量 | |
closing tables |
刷新表数据到磁盘并关闭表。 |
|
converting HEAP to MyISAM | 将内部内存临时表转成成磁盘上的myisam表 | |
copy to tmp table |
线程在执行alter table命令。 |
建议:凌晨执行 |
altering table | 原地执行alter table命令 | |
Copying to tmp table | 从内存将数据拷贝到临时表 | 建议:创建索引 |
Copying to group table | 如果语句的order by和group by列不同,行被分组排序并拷贝到临时表 | |
Copying to tmp table on disk |
拷贝到磁盘上的临时表。 |
建议:创建索引,加大tmp_table_size/max_heap_table_size |
Creating index | 正在对myisam表执行alter table … enable keys | |
Creating sort index | 使用内部临时表执行select操作 | 建议:创建索引 |
creating table | 创建表(包含临时表) | |
Creating tmp table |
现在内存或磁盘上创建临时表。 |
建议:创建索引 |
committing alter table to storage engine | 原理alter table结束,提交结果 | |
deleting from main table |
在执行多表删除的第一部分。 |
|
deleting from reference tables | 多表删除的第二部分,从其他表删除匹配的行 | |
discard_or_import_tablespace | 线程在处理alter table … discard tablespace或alter table … import tablespace | |
freeing items | 线程已经执行完一个命令。释放一些items | |
FULLTEXT initialization | 准备执行全完检索 | |
Removing duplicates | 查询使用了distinct | |
removing tmp table | 移除内部临时表 | |
Reading from net | server端正通过网络读取客户端发送过来的请求 | 建议:减小客户端发送数据包大小,提高网络带宽/质量 |
Sending data | 从server端发送数据到客户端,也有可能是接收存储引擎层返回的数据,再发送给客户端,数据量很大时尤其经常能看见 | 建议:通过索引或LIMIT,减少需要扫描的数据量 |
Sorting result | 正在对结果进行排序,类似Creating sort index,不过是正常表,而不是在内存表中进行排序 | 建议:创建索引 |
Statistics | 进行数据统计以便解析执行计划,如果状态比较经常出现,有可能是磁盘IO性能很差 | 建议:查看当前io性能状态,例如iowait |
System lock | 正在等待系统级锁 | 建议:关闭外部锁skip-external-locking(已经默认关闭了) |
Waiting for global read lock | 通常是FLUSH TABLES WITH READ LOCK整等待全局读锁 | |
Waiting for tables, |
通常是因为FLUSH TABLES, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE等需要刷新表结构并重新打开 |
以上是关于MySQL -- show processlist的主要内容,如果未能解决你的问题,请参考以下文章
MySQL中 show processlist 和 show full processlist命令详解