8.14.3 通用线程状态

下 table 描述了与常规查询处理相关的线程State值,而不是诸如复制之类的更专门的活动。其中许多仅用于发现服务器中的错误。

当线程在创建 table 的函数的末尾创建 table(包括内部临时 table)时,会发生这种情况。即使由于某些错误而无法创建 table,也会使用此状态。

服务器正在执行就地ALTER TABLE的过程。

该线程正在计算MyISAMtable 键分布(例如,对于ANALYZE TABLE)。

线程正在检查服务器是否具有执行该语句所需的特权。

线程正在执行 table 检查操作。

该线程已处理一个命令,并准备释放内存并重置某些状态变量。

线程正在将已更改的 table 数据刷新到磁盘并关闭已使用的 table。这应该是一个快速的操作。如果没有,请验证您没有完整的磁盘,并且磁盘使用率不是很高。

线程正在将内部临时 table 从MEMORYtable 转换为磁盘上 table。

线程正在处理ALTER TABLE语句。在创建具有新结构的 table 之后但在将行复制到其中之前,将发生此状态。

对于处于这种状态的线程,可以使用性能架构来获取有关复制操作进度的信息。参见第 25.12.5 节“性能架构阶段事件 table”

如果语句具有不同的ORDER BYGROUP BY条件,则将按组对行进行排序并将其复制到临时 table 中。

服务器正在复制到内存中的临时 table。

服务器正在复制到磁盘上的临时 table。临时结果集太大(请参见第 8.4.4 节“ MySQL 中的内部临时 table 使用”)。因此,线程正在将临时 table 从内存中更改为基于磁盘的格式,以节省内存。

线程正在处理MyISAMtable 的ALTER TABLE ... ENABLE KEYS

该线程正在处理使用内部临时 table 解析的SELECT

线程正在创建一个 table。这包括创建临时 table。

线程正在内存或磁盘上创建临时 table。如果该 table 是在内存中创建的,但后来又转换为磁盘 table,则该操作期间的状态将为Copying to tmp table on disk

服务器已完成就地ALTER TABLE并提交结果。

服务器正在执行多 table 删除的第一部分。它仅从第一个 table 中删除,并保存用于从其他(参考)table 中删除的列和偏移量。

服务器正在执行多 table 删除的第二部分,并从其他 table 中删除匹配的行。

线程正在处理ALTER TABLE ... DISCARD TABLESPACEALTER TABLE ... IMPORT TABLESPACE语句。

这发生在最后但清除ALTER TABLECREATE VIEWDELETEINSERTSELECTUPDATE语句之前。

对于end状态,可能会发生以下操作:

该线程已开始执行一条语句。

线程正在init_command系统变量的值中执行语句。

线程已执行命令。在此状态下完成的一些项目释放涉及查询缓存。此状态通常后跟cleaning up

服务器正在准备执行自然语言的全文本搜索。

这发生在初始化ALTER TABLEDELETEINSERTSELECTUPDATE语句之前。服务器在此状态下采取的操作包括刷新二进制日志,InnoDB日志和一些查询缓存清除操作。

有人向该线程发送了KILL语句,下次检查 kill 标志时,它应该中止。在 MySQL 的每个主循环中都会检查该标志,但是在某些情况下,线程死亡仍然可能需要很短的时间。如果该线程被某个其他线程锁定,则杀死操作将在另一个线程释放其锁定后立即生效。

线程正在将一条语句写入慢速查询日志。

连接线程的初始状态,直到 Client 端已成功通过身份验证。

服务器正在启用或禁用 table 索引。

线程正在尝试打开 table。除非有什么阻止打开的步骤,否则这应该是非常快速的过程。例如,一个ALTER TABLELOCK TABLE语句可以阻止在该语句完成之前打开 table。还值得检查您的table_open_cache值是否足够大。

服务器正在对查询执行初始优化。

此状态在查询优化期间发生。

该线程正在删除不需要的中继日志文件。

此状态在处理查询之后但在freeing items状态之前发生。

服务器正在从 Client 端读取数据包。在 MySQL 5.7.8 之前,此状态称为Reading from net

该查询使用SELECT DISTINCT的方式使 MySQL 无法在早期阶段优化独特的操作。因此,MySQL 需要一个额外的阶段来删除所有重复的行,然后再将结果发送给 Client 端。

该线程正在处理SELECT语句后删除内部临时 table。如果未创建临时 table,则不使用此状态。

线程正在重命名 table。

线程正在处理ALTER TABLE语句,创建了新 table,并对其进行了重命名以替换原始 table。

线程获得了该 table 的锁,但是在获得该锁后,该线程注意到基础 table 结构已更改。它释放了锁,关闭了 table,并试图重新打开它。

修复代码正在使用某种排序来创建索引。

服务器正在准备执行就地ALTER TABLE

该线程已完成对MyISAMtable 的多线程修复。

修复代码使用的是通过密钥缓存一对一地创建密钥。这比Repair by sorting慢得多。

线程正在回滚事务。

对于诸如修复或分析之类的MyISAMtable 操作,该线程将新 table 状态保存到.MYI文件头中。状态包括诸如行数,AUTO_INCREMENT计数器和键分布之类的信息。

线程正在执行第一阶段以在更新所有匹配的行之前找到它们。如果UPDATE正在更改用于查找相关行的索引,则必须执行此操作。

该线程正在读取和处理SELECT语句的行,并将数据发送到 Client 端。因为在此状态下发生的操作往往会执行大量磁盘访问(读取),所以它通常是给定查询生命周期中运行时间最长的状态。

服务器正在将数据包写入 Client 端。在 MySQL 5.7.8 之前,此状态称为Writing to net

线程正在开始ALTER TABLE操作。

线程正在进行排序以满足GROUP BY

该线程正在进行排序以满足ORDER BY

线程正在对索引页进行排序,以在MyISAMtable 优化操作期间更有效地访问。

对于SELECT语句,这类似于Creating sort index,但是对于非临时 table。

语句执行开始的第一阶段。

服务器正在计算统计信息以制定查询执行计划。如果线程长时间处于此状态,则服务器可能是磁盘绑定的,正在执行其他工作。

线程已调用mysql_lock_tables(),此后线程状态尚未更新。这是一种非常普遍的状态,可能由于多种原因而发生。

例如,线程将要请求或正在 awaittable 的内部或外部系统锁定。当InnoDB在执行LOCK TABLES期间 awaittable 级锁定时,可能会发生这种情况。如果此状态是由对外部锁的请求引起的,并且您没有使用正在访问同一MyISAMtable 的多个mysqld服务器,则可以使用--skip-external-locking选项禁用外部系统锁。但是,默认情况下将禁用外部锁定,因此此选项可能无效。对于SHOW PROFILE,此状态 table 示线程正在请求锁定(不 await 它)。

线程已准备好开始更新 table。

线程正在搜索要更新的行,并且正在更新它们。

服务器正在执行多 table 更新的第一部分。它仅更新第一个 table,并保存要用于更新其他(参考)table 的列和偏移量。

服务器正在执行多 table 更新的第二部分,并从其他 table 更新匹配的行。

该线程将要请求或正在 await 通过GET_LOCK()调用请求的咨询锁定。对于SHOW PROFILE,此状态 table 示线程正在请求锁定(不 await 它)。

该线程已调用SLEEP()调用。

带读取锁的平桌子正在 await 提交锁。

带读取锁的平桌子正在 await 全局读取锁定,或者正在设置全局read_only系统变量。

该线程收到有关 table 的基础结构已更改的通知,它需要重新打开 table 以获取新的结构。但是,要重新打开该 table,它必须 await,直到所有其他线程关闭了该 table。

如果另一个线程在相关 table 上使用了FLUSH TABLES或以下语句之一,则会发生此通知:FLUSH TABLES tbl_nameALTER TABLERENAME TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE

线程正在执行FLUSH TABLES,并且正在 await 所有线程关闭其 table,或者该线程收到有关 table 的基础结构已更改的通知,并且需要重新打开 table 以获取新结构。但是,要重新打开该 table,它必须 await,直到所有其他线程关闭了该 table。

如果另一个线程在相关 table 上使用了FLUSH TABLES或以下语句之一,则会发生此通知:FLUSH TABLES tbl_nameALTER TABLERENAME TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE

服务器正在 await 从元数据锁定子系统获取THR_LOCK锁或锁,其中* lock_type *table 示锁的类型。

此状态 table 示正在 awaitTHR_LOCK

这些状态指示 await 元数据锁定:

有关 table 锁定指示器的信息,请参见第 8.11.1 节“内部锁定方法”。有关元数据锁定的信息,请参见第 8.11.4 节“元数据锁定”。要查看哪些锁阻止了锁请求,请使用第 25.12.12 节,“性能模式锁定 table”中描述的性能架构锁 table。

线程正在 await 条件变为真的一般状态。没有可用的特定状态信息。

服务器正在将数据包写入网络。从 MySQL 5.7.8 开始,此状态称为Sending to client

首页