MySQL -- show processlist

本文介绍了如何使用MySQL命令展示完整进程列表,并详细解释了各进程状态的含义及优化建议,帮助读者理解并优化MySQL运行时的行为。
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

现在内存或磁盘上创建临时表。
如果是先创建内存中的临时表然后转换到磁盘上,显示的状态是Copying to tmp table on disk

建议:创建索引
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 netserver端正通过网络读取客户端发送过来的请求建议:减小客户端发送数据包大小,提高网络带宽/质量
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,
或Waiting for table flush

通常是因为FLUSH TABLES, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE等需要刷新表结构并重新打开 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值