mysql show processlist 命令详解

来源:互联网 发布:进化论不能 知乎 编辑:程序博客网 时间:2024/06/07 06:33

命令格式

SHOW [FULL] PROCESSLIST

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

 

MYSQL线程状态说明

这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:

状态含义After create当线程创建表(包括临时表)Analyzing线程正在分析MYISAM的key分布checking permissions线程正在检查执行语句的权限Checking table线程正在执行表check操作cleaning up线程已经处理完一个命令然后开始准备释放内存和reset状态变量closing tables线程把改变的表数据flush到磁盘然后关闭使用的表。这个操作应该是很快的,如果这个状态长时间出现,要留意检查磁盘的状态。converting HEAP to MyISAM把一个内存中的临时表转换到磁盘上的MYISAM表copy to tmp table线程执行alter table语句。这个状态出现在新的表结构已经创建但数据还在拷贝到新表之前。Copying to group table如果一个语句的group by和order by 条件不同,数据通过group by来排序然后拷贝到临时表Copying to tmp table拷贝到内存中的临时表Copying to tmp table on disk如果临时表过大,服务器要把内存中的临时表拷贝到磁盘。Creating index对一个MYISAM 执行ALTER TABLE ... ENABLE KEYSCreating sort index线程通过执行一个临时表来执行select语句creating table线程正在创建表(包括临时表)Creating tmp table创建临时表(在内存或者磁盘)上,如果表一开始在内存中到后面太大,临时表就会转换到磁盘上,而且状态也会变成Copying to tmp table on diskdeleting from main table服务器正在执行一个多表delete语句的第一部分,也就是从第一张表删除数据,并且保留行以及偏移量数据以用来删除其他表中的数据。deleting from reference tables服务器正在执行一个多表delete语句的二部分discard_or_import_tablespace线程正在执行ALTER TABLE ... DISCARD TABLESPACE 或者ALTER TABLE ... IMPORT TABLESPACE 语句.end这个状态出现在ALTER TABLECREATE VIEWDELETE,INSERTSELECTUPDATE语句结束之后,但在清理以前。executing线程开始执行一个语句Execution of init_command线程在init_command系统变量中执行语句freeing items线程已经执行命令。一些释放Flushing tables这个线程执行了FLUSH TABLES,而且等待所有的线程关闭表FULLTEXT initialization服务器准备执行文本搜索init Killed发送了kill 语句给这个查询。这个语句在下次检查kill标志的时候,这个语句就应该放弃掉Locked查询被其他的查询锁住了logging slow query线程正在把慢sql写到慢查询log文件中NULL login直到线程授权成功以前都是这个状态manage keys服务器正在卡哭泣或者关闭表的索引Opening tablesOpening table线程正在打开表。这个操作是很快的,除非有其他原因阻止了打开操作,例如ALTER TABLE   LOCK TABLEoptimizing服务器正在进行一个查询的初始阶段优化preparing正在进行查询优化Purging old relay logs线程删除不需要的relay log文件query end这个状态出现在处理完以后但在冻结item之前Reading from net服务器从网络读取包Removing duplicates查询使用了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 statemyisam的analysis和repair操作中,线程会把表的一些信息例如表的行数、AUTO_INCREMENT的计数器以及key的分布都保存到.MYI文件的头部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 lockSystem Lock后的另一个线程状态。线程已经获取了一个外部锁,然后接下来要去获取一个内部表锁。update线程已经准备好去更新Updating现在正在找或者正在更新行updating main table服务器正在执行一个多表update语句,正在更新第一张表,保存行和偏移量以用来更新其他表。updating reference tables服务器正在执行一个多表update语句的第二部分,正在从其他表更新行User lock请求或者等待获取一个锁User sleep线程sleepWaiting for release of readlock等待一个全局的读锁Waiting for tablesWaiting for table线程获得提示依赖的表结构发生了改变,线程需要重新打开表来获取新的结构。但是,重新打开表是需要等待其他的线程关闭表。Waiting on cond线程正在等条件变成trueWaiting to get readlock线程用FLUSH TABLES WITH READ LOCK语句,所以要获得一个全局的读锁,这个状态表示正在等这个锁。Writing to net服务器把包写到网络

文章来源:http://www.daniel-journey.com/archives/1000 


0 0
原创粉丝点击