这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:
状态
含义
After create
当线程创建表(包括临时表)
Analyzing
线程正在分析MYISAM的key分布
checking permissions
线程正在检查执行语句的权限
Checking table
线程正在执行表check操作
cleaning up
线程已经处理完一个命令然后开始准备释放内存和reset状态变量
closing tables
线程把改变的表数据flush到磁盘然后关闭使用的表。这个操作应该是很快的,如果这个状态长时间出现,要留意检查磁盘的状态。
<code>converting HEAP to MyISAM</code>
把一个内存中的临时表转换到磁盘上的MYISAM表
copy to tmp table
线程执行alter table语句。这个状态出现在新的表结构已经创建但数据还在拷贝到新表之前。
<code>Copying to group table</code>
如果一个语句的group by和order by 条件不同,数据通过group by来排序然后拷贝到临时表
Copying to tmp table
拷贝到内存中的临时表
<code>Copying to tmp table on disk</code>
如果临时表过大,服务器要把内存中的临时表拷贝到磁盘。
Creating index
对一个MYISAM 执行<code>ALTER TABLE ... ENABLE KEYS</code>
<code>Creating sort index</code>
线程通过执行一个临时表来执行select语句
creating table
线程正在创建表(包括临时表)
<code>Creating tmp table</code>
创建临时表(在内存或者磁盘)上,如果表一开始在内存中到后面太大,临时表就会转换到磁盘上,而且状态也会变成<code>Copying to tmp table on disk</code>
deleting from main table
服务器正在执行一个多表delete语句的第一部分,也就是从第一张表删除数据,并且保留行以及偏移量数据以用来删除其他表中的数据。
<code>deleting from reference tables</code>
服务器正在执行一个多表delete语句的二部分
discard_or_import_tablespace
线程正在执行<code>ALTER TABLE ... DISCARD TABLESPACE</code> 或者<code>ALTER TABLE ... IMPORT TABLESPACE</code> 语句.
end
这个状态出现在<code>ALTER TABLE</code>, <code>CREATE VIEW</code>, <code>DELETE</code>, <code>INSERT</code>, <code>SELECT</code>, <code>UPDATE语句结束之后,但在清理以前。</code>
executing
线程开始执行一个语句
Execution of init_command
线程在init_command系统变量中执行语句
freeing items
线程已经执行命令。一些释放
Flushing tables
这个线程执行了<code>FLUSH TABLES,而且等待所有的线程关闭表</code>
<code>FULLTEXT initialization</code>
服务器准备执行文本搜索
init
Killed
发送了kill 语句给这个查询。这个语句在下次检查kill标志的时候,这个语句就应该放弃掉
Locked
查询被其他的查询锁住了
logging slow query
线程正在把慢sql写到慢查询log文件中
NULL
login
直到线程授权成功以前都是这个状态
manage keys
服务器正在卡哭泣或者关闭表的索引
<code>Opening tables</code>, <code>Opening table</code>
线程正在打开表。这个操作是很快的,除非有其他原因阻止了打开操作,例如<code>ALTER TABLE</code> <code>LOCK TABLE</code>
optimizing
服务器正在进行一个查询的初始阶段优化
preparing
正在进行查询优化
Purging old relay logs
线程删除不需要的relay log文件
query end
这个状态出现在处理完以后但在冻结item之前
Reading from net
服务器从网络读取包
<code>Removing duplicates</code>
查询使用了select distinct。mysq在发送数据到客户端之前需要一个额外的过程来删除重复的行
removing tmp table
在执行了select语句以后,线程正在删除内部的临时表
rename
线程正在重命名表
rename result table
线程正在执行一个alter table语句,而且已经创建了新表,对新表重命名来替换原始表。
Reopen tables
线程获取了一个表的锁。由于它已经得知它依赖的表结构已经发生了变化。线程需要释放锁、关闭表、然后尝试重新打开他。
Repair by sorting
修复代码通过排序来创建索引。
Repair done
线程完成了对一个myisam表的多线程修复。
Repair with keycache
修复代码正在通过key的缓存创建key。
Rolling back
线程正在回滚事物。
Saving state
myisam的analysis和repair操作中,线程会把表的一些信息例如表的行数、<code>AUTO_INCREMENT的计数器以及key的分布都保存到.MYI文件的头部</code>
Searching rows for update
语句执行的第一个阶段,找到所有满足条件的行记录
Sending data
线程在读取和处理SELECT语句,发送数据到客户端。由于语句需要大量的磁盘访问,这个状态会在语句的整个生命周期中占据最长的一个状态。
setup
线程开始进行ALTER TABLE 语句
Sorting for group
线程正在为group by 执行排序
Sorting for order
线程正在为order by 执行排序
Sorting index
在myisam表的优化操作中,进行索引页的排序以便获得更好的访问性能。
Sorting result
对结果进行排序
statistics
服务器正在计算统计数据从而来生成一个执行计划。如果一个线程保留这个状态很长的时间,意味着服务器在执行其他的磁盘相关的工作。
System lock
线程正在请求和获取一个内部和外部锁。如果有这个状态
Table lock
System Lock后的另一个线程状态。线程已经获取了一个外部锁,然后接下来要去获取一个内部表锁。
update
线程已经准备好去更新
Updating
现在正在找或者正在更新行
<code>updating main table</code>
服务器正在执行一个多表update语句,正在更新第一张表,保存行和偏移量以用来更新其他表。
<code>updating reference tables</code>
服务器正在执行一个多表update语句的第二部分,正在从其他表更新行
User lock
请求或者等待获取一个锁
<code>User sleep</code>
线程sleep
<code>Waiting for release of readlock</code>
等待一个全局的读锁
<code>Waiting for tables</code>, <code>Waiting for table</code>
线程获得提示依赖的表结构发生了改变,线程需要重新打开表来获取新的结构。但是,重新打开表是需要等待其他的线程关闭表。
Waiting on cond
线程正在等条件变成true
Waiting to get readlock
线程用<code>FLUSH TABLES WITH READ LOCK语句,所以要获得一个全局的读锁,这个状态表示正在等这个锁。</code>
<code>Writing to net</code>
服务器把包写到网络
本文转自 freeterman 51CTO博客,原文链接:http://blog.51cto.com/myunix/1742367,如需转载请自行联系原作者