下面的列表描述了线程状态
与一般查询处理相关的值,而不是与复制等更专门的活动相关的值。其中许多方法仅用于查找服务器中的错误。
当线程在创建表的函数末尾创建一个表(包括内部临时表)时,就会发生这种情况。即使由于某些错误而无法创建表,也会使用此状态。
服务器正在执行就地执行
ALTER TABLE
.线程正在计算a
MyISAM
表键分布(例如,for分析表
).线程正在检查服务器是否具有执行语句所需的特权。
线程正在执行表检查操作。
线程已经处理了一个命令,准备释放内存并重置某些状态变量。
线程正在将更改的表数据刷新到磁盘,并关闭使用的表。这次行动应该很快。如果不是,请确认您的磁盘没有满,并且磁盘没有被大量使用。
对象转换为内部临时表
内存
表到磁盘上的表。线程正在处理
ALTER TABLE
声明。此状态发生在具有新结构的表创建之后,但在将行复制到表中之前。对于处于此状态的线程,可以使用Performance Schema获取复制操作的进度。看到第25.12.5节“性能方案阶段事件表”.
如果一个语句有不同的
命令
而且集团
标准中,行按组排序并复制到临时表中。服务器正在复制到内存中的临时表。
服务器正在复制到磁盘上的临时表。临时结果集变得太大(请参阅第8.4.4节“MySQL内部临时表的使用”).因此,线程将临时表从内存中的格式更改为基于磁盘的格式,以节省内存。
线程正在处理
ALTER TABLE……启用钥匙
对于一个MyISAM
表格线程正在处理
选择
这是使用内部临时表解决的。线程正在创建一个表。这包括创建临时表。
线程正在内存或磁盘上创建临时表。如果表是在内存中创建的,但后来被转换为磁盘上的表,则该操作期间的状态为
正在复制到磁盘上的tmp表
.服务器已经完成就位
ALTER TABLE
并提交结果。服务器正在执行多表删除的第一部分。它只从第一个表中删除,并保存用于从其他(引用)表中删除的列和偏移量。
服务器正在执行多表删除的第二部分,并从其他表中删除匹配的行。
线程正在处理
ALTER TABLE……丢弃表空间
或ALTER TABLE……导入表空间
声明。这发生在末尾,但在清理之前
ALTER TABLE
,创建视图
,删除
,插入
,选择
,或更新
语句。为
结束
状态下,以下操作可能正在发生:在更改表中的数据后删除查询缓存项
将事件写入二进制日志
释放内存缓冲区,包括用于blob
线程已经开始执行一条语句。
的值中执行语句
init_command
系统变量。线程执行了一个命令。在此状态期间执行的一些释放项涉及到查询缓存。这种状态之后通常是
清理
.服务器准备执行自然语言全文搜索。
的初始化之前发生
ALTER TABLE
,删除
,插入
,选择
,或更新
语句。服务器在此状态下所采取的操作包括刷新二进制日志InnoDB
日志,以及一些查询缓存清理操作。有人发来一封
杀了
语句传递给线程,它应该在下次检查kill标志时中止。在MySQL的每个主循环中都会检查该标志,但在某些情况下,线程仍然需要很短的时间才能死亡。如果该线程被其他线程锁定,那么当其他线程释放锁时,kill就会立即生效。线程正在向慢查询日志写入一条语句。
连接线程的初始状态,直到客户端成功通过身份验证。
服务器正在启用或禁用表索引。
线程正在尝试打开一个表。这应该是一个非常快速的过程,除非有什么东西阻止打开。例如,一个
ALTER TABLE
或者一个锁表
语句可以阻止在语句完成之前打开表。也值得检查你的table_open_cache
值足够大。服务器正在为查询执行初始优化。
此状态发生在查询优化期间。
线程正在删除不需要的中继日志文件。
此状态发生在处理查询之后,但在
释放物品
状态。服务器正在从客户端读取数据包。这种状态叫做
阅读网
在MySQL 5.7.8之前。查询正在使用
选择不同的
这样MySQL就不能在早期阶段优化掉不同的操作。因此,MySQL需要一个额外的阶段,在将结果发送给客户端之前删除所有重复的行。线程正在删除一个内部临时表
选择
声明。如果没有创建临时表,则不使用此状态。线程正在重命名一个表。
线程正在处理
ALTER TABLE
语句创建了新表,并正在对其重命名以替换原始表。线程获得了表的锁,但在获得锁后注意到底层表结构发生了变化。它释放了锁,关闭了表,并试图重新打开它。
修复代码使用排序来创建索引。
服务器准备执行就地执行
ALTER TABLE
.线程已经完成了一个多线程修复
MyISAM
表格修复代码正在通过密钥缓存逐个创建密钥。这比
修复的分类
.线程正在回滚事务。
为
MyISAM
表操作,如修复或分析,线程正在将新的表状态保存到.MYI
文件头。状态包括诸如行数、AUTO_INCREMENT
计数器和键分发。线程正在执行第一个阶段,在更新它们之前查找所有匹配的行。这必须要做,如果
更新
正在更改用于查找相关行的索引。发送数据
线程正在读取和处理对象的行
选择
语句,并向客户端发送数据。由于在此状态期间发生的操作往往执行大量的磁盘访问(读取),因此它通常是给定查询生命周期中运行时间最长的状态。服务器正在写一个包给客户端。这种状态叫做
写信给网
在MySQL 5.7.8之前。线程正在开始一个
ALTER TABLE
操作。线程正在进行排序以满足
集团
.线程正在进行排序以满足
命令
.线程正在对索引页进行排序,以便在
MyISAM
表的优化操作。对于一个
选择
语句,这类似于创建分类索引
,但对于非临时表。语句执行开始时的第一个阶段。
服务器正在计算统计信息以制定查询执行计划。如果线程长时间处于这种状态,则服务器可能是磁盘绑定执行其他工作。
线程已经调用
mysql_lock_tables ()
自那以后,线程状态就没有更新过。这是一种非常普遍的状态,可能因多种原因而发生。例如,线程将请求或等待表的内部或外部系统锁。这可能发生在
InnoDB
的执行期间等待表级锁锁表
.如果此状态是由对外部锁的请求引起的,并且您没有使用多个mysqld访问相同的服务器MyISAM
表中禁用外部系统锁——skip-external-locking
选择。但是,外部锁定在默认情况下是禁用的,所以这个选项可能没有效果。为显示配置文件
,此状态意味着线程正在请求锁(而不是等待锁)。线程准备开始更新表。
线程正在搜索要更新的行并正在更新它们。
服务器正在执行多表更新的第一部分。它只更新第一个表,并保存用于更新其他(引用)表的列和偏移量。
服务器正在执行多表更新的第二部分,并从其他表中更新匹配的行。
线程将请求或正在等待使用
GET_LOCK ()
调用。为显示配置文件
,此状态意味着线程正在请求锁(而不是等待锁)。线程调用了
睡眠()
调用。用读锁刷新表
正在等待提交锁。线程收到一个通知,表示表的底层结构已更改,需要重新打开表以获得新结构。但是,要重新打开表,它必须等到所有其他线程都关闭了相关的表。
如果使用了另一个线程,则会发出此通知
刷新表
或对所讨论的表格的下列陈述之一:刷新表
,tbl_name
ALTER TABLE
,重命名表
,修理表
,分析表
,或优化表
.线程正在执行
刷新表
和正在等待所有线程关闭它们的表,或者线程收到一个通知,表示表的底层结构发生了变化,需要重新打开表以获得新的结构。但是,要重新打开表,它必须等到所有其他线程都关闭了相关的表。如果使用了另一个线程,则会发出此通知
刷新表
或对所讨论的表格的下列陈述之一:刷新表
,tbl_name
ALTER TABLE
,重命名表
,修理表
,分析表
,或优化表
.服务器正在等待获取
THR_LOCK
锁或来自元数据锁定子系统的锁,其中lock_type
锁的类型。此状态表示等待
THR_LOCK
:等待表级锁
这些状态表示等待元数据锁:
等待事件元数据锁定
等待全局读锁
等待模式元数据锁定
等待存储函数元数据锁定
等待存储过程元数据锁定
等待表元数据锁定
等待触发元数据锁定
有关表锁定指示器的信息,请参见第8.11.1节“内部锁定方法”.有关元数据锁定的信息,请参见第8.11.4节“元数据锁定”.要查看哪些锁正在阻塞锁请求,请使用性能架构锁表第25.12.12节,“性能架构锁表”.
一种通用状态,线程在此状态中等待一个条件变为真。没有具体的状态信息可用。
服务器正在向网络写数据包。这种状态叫做
发送到客户端
MySQL 5.7.8版本。