文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  常规线程状态

10.14.3 常规线程状态

以下列表描述了与常规查询处理相关的线程 状态 值,而不是更专业的活动(如复制)。其中许多仅用于查找服务器中的错误。

  • 创建后

    当线程创建表(包括内部临时表)时,会在创建表的函数结束时出现这种情况。即使由于某些错误无法创建表,也会使用此状态。

  • 正在更改表

    服务器正在执行就地 ALTER TABLE

  • 正在分析

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

  • 正在检查权限

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

  • 正在检查表

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

  • 正在清理

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

  • 正在关闭表

    线程正在将更改的表数据刷新到磁盘并关闭使用的表。这应该是一个快速的操作。如果不是,请验证您的磁盘空间是否已满,以及磁盘使用率是否过高。

  • 正在将更改提交到存储引擎

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

  • 正在将 HEAP 转换为磁盘

    线程正在将内部临时表从 MEMORY 表转换为磁盘表。

  • 复制到临时表

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

    对于处于此状态的线程,可以使用性能模式获取有关复制操作进度的信息。请参阅第 29.12.5 节,“性能模式阶段事件表”

  • 正在复制到组表

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

  • 正在复制到内存中的临时表

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

  • 正在复制到磁盘上的临时表

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

  • 正在创建索引

    线程正在为 MyISAM 表处理 ALTER TABLE ... ENABLE KEYS

  • 创建排序索引

    线程正在处理一个使用内部临时表解析的 SELECT

  • 创建表

    线程正在创建表。这包括创建临时表。

  • 创建临时表

    线程正在内存或磁盘上创建临时表。如果表是在内存中创建的,但后来被转换为磁盘上的表,则该操作期间的状态为 复制到磁盘上的临时表

  • 从主表中删除

    服务器正在执行多表删除的第一部分。它只从第一个表中删除数据,并保存要用于从其他(引用)表中删除数据的列和偏移量。

  • 从引用表中删除

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

  • discard_or_import_tablespace

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

  • 结束

    这发生在 ALTER TABLECREATE VIEWDELETEINSERTSELECTUPDATE 语句结束之后但在清理之前。

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

    • 将事件写入二进制日志

    • 释放内存缓冲区,包括用于 blob 的缓冲区

  • 执行中

    线程已开始执行语句。

  • 执行 init_command

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

  • 释放项目

    线程已执行命令。此状态后通常跟随着 清理中

  • FULLTEXT 初始化

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

  • 初始化

    这发生在 ALTER TABLEDELETEINSERTSELECTUPDATE 语句初始化之前。服务器在此状态下执行的操作包括刷新二进制日志和 InnoDB 日志。

  • 已终止

    有人已向线程发送了 KILL 语句,并且它应该在下一次检查终止标志时中止。该标志在 MySQL 的每个主循环中都会检查,但在某些情况下,线程可能仍然需要一小段时间才能终止。如果线程被其他线程锁定了,则一旦其他线程释放其锁,终止就会生效。

  • 锁定系统表

    线程正在尝试锁定系统表(例如,时区表或日志表)。

  • 记录慢查询

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

  • 登录

    连接线程的初始状态,直到客户端通过身份验证。

  • 管理键

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

  • 打开系统表

    线程正在尝试打开系统表(例如,时区表或日志表)。

  • 打开表

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

    对于系统表,使用 打开系统表 状态。

  • 优化中

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

  • 准备中

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

  • 准备更改表

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

  • 清除旧的 relay 日志

    线程正在删除不需要的 relay 日志文件。

  • 查询结束

    此状态发生在处理查询之后但在 释放项目 状态之前。

  • 从客户端接收数据

    服务器正在从客户端读取数据包。

  • 删除重复项

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

  • 删除临时表

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

  • 重命名

    线程正在重命名表。

  • 重命名结果表

    线程正在处理 ALTER TABLE 语句,已创建新表,并且正在重命名它以替换原始表。

  • 重新打开表

    线程获得了表的锁,但在获得锁后注意到底层表结构发生了变化。它已释放锁,关闭表,并正在尝试重新打开它。

  • 通过排序修复

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

  • 修复完成

    线程已完成对 MyISAM 表的多线程修复。

  • 使用键缓存修复

    修复代码正在使用通过键缓存逐个创建键。这比 通过排序修复 慢得多。

  • 回滚中

    线程正在回滚事务。

  • 保存状态

    对于 MyISAM 表操作(如修复或分析),线程正在将新的表状态保存到 .MYI 文件头中。状态包括行数、AUTO_INCREMENT 计数器和键分布等信息。

  • 搜索要更新的行

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

  • 发送数据

    此状态现在包含在 执行中 状态中。

  • 发送到客户端

    服务器正在将数据包写入客户端。

  • 设置

    线程正在开始 ALTER TABLE 操作。

  • 为分组排序

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

  • 为顺序排序

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

  • 排序索引

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

  • 排序结果

    对于 SELECT 语句,这类似于 创建排序索引,但用于非临时表。

  • 启动中

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

  • 统计

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

  • 系统锁

    线程已调用 mysql_lock_tables(),并且线程状态自此之后未更新。这是一个非常普遍的状态,可能由多种原因导致。

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

    对于系统表,将使用 正在锁定系统表 状态。

  • update

    线程正在准备开始更新表。

  • 正在更新

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

  • 正在更新主表

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

  • 正在更新引用表

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

  • 用户锁

    线程将要请求或正在等待使用 GET_LOCK() 调用请求的咨询锁。对于 SHOW PROFILE,此状态表示线程正在请求锁(而不是等待锁)。

  • 用户休眠

    线程已调用 SLEEP() 调用。

  • 正在等待提交锁

    FLUSH TABLES WITH READ LOCK 正在等待提交锁。

  • 正在等待处理程序提交

    线程正在等待事务相对于查询处理的其他部分进行提交。

  • 正在等待表

    线程收到通知,指示表的底层结构已更改,需要重新打开表才能获取新结构。但是,要重新打开表,它必须等到所有其他线程都关闭了相关表。

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

  • 正在等待表刷新

    线程正在执行 FLUSH TABLES 并正在等待所有线程关闭其表,或者线程收到通知,指示表的底层结构已更改,需要重新打开表才能获取新结构。但是,要重新打开表,它必须等到所有其他线程都关闭了相关表。

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

  • 正在等待 lock_type

    服务器正在等待获取 THR_LOCK 锁或来自元数据锁定子系统的锁,其中 lock_type 指示锁的类型。

    此状态表示正在等待 THR_LOCK

    • 正在等待表级锁

    这些状态表示正在等待元数据锁

    • 正在等待事件元数据锁

    • 正在等待全局读锁

    • 正在等待架构元数据锁

    • 正在等待存储函数元数据锁

    • 正在等待存储过程元数据锁

    • 正在等待表元数据锁

    • 正在等待触发器元数据锁

    有关表锁指示符的信息,请参阅 第 10.11.1 节“内部锁定方法”。有关元数据锁定的信息,请参阅 第 10.11.4 节“元数据锁定”。要查看哪些锁正在阻塞锁请求,请使用 第 29.12.13 节“性能架构锁表” 中介绍的性能架构锁表。

  • 正在等待条件

    线程正在等待条件变为真的通用状态。没有可用的特定状态信息。

  • 正在写入网络

    服务器正在将数据包写入网络。