以下列表描述State
了与一般查询处理相关联的线程值,而不是与复制等更专门的活动相关联的线程值。其中许多仅对查找服务器中的错误有用。
当线程在创建表的函数末尾创建表(包括内部临时表)时,会发生这种情况。即使由于某些错误而无法创建表,也会使用此状态。
服务器正在执行就地
ALTER TABLE
.该线程正在计算
MyISAM
表键分布(例如,对于ANALYZE TABLE
)。该线程正在检查服务器是否具有执行该语句所需的权限。
线程正在执行表检查操作。
线程已处理一个命令并准备释放内存并重置某些状态变量。
该线程正在将更改的表数据刷新到磁盘并关闭已使用的表。这应该是一个快速的操作。如果不是,请确认您的磁盘没有满,并且磁盘没有被大量使用。
committing alter table to storage engine
服务器已就地完成
ALTER TABLE
并正在提交结果。该线程正在将内部临时表从
MEMORY
表转换为磁盘表。线程正在处理一条
ALTER TABLE
语句。此状态发生在具有新结构的表创建之后但行被复制到其中之前。对于处于这种状态的线程,可以使用 Performance Schema 来获取有关复制操作的进度。请参阅 第 27.12.5 节,“性能模式阶段事件表”。
如果语句具有不同的
ORDER BY
和GROUP BY
条件,则行按组排序并复制到临时表。服务器正在复制到内存中的临时表。
服务器正在复制到磁盘上的临时表。临时结果集变得太大(请参阅 第 8.4.4 节,“MySQL 中的内部临时表使用”)。因此,线程正在将临时表从内存中的格式更改为基于磁盘的格式以节省内存。
线程正在处理
ALTER TABLE ... ENABLE KEYS
一个MyISAM
表。该线程正在处理
SELECT
使用内部临时表解析的 a。该线程正在创建一个表。这包括创建临时表。
该线程正在内存或磁盘上创建一个临时表。如果表是在内存中创建的,但后来转换为磁盘表,则该操作期间的状态为
Copying to tmp table on disk
.服务器正在执行多表删除的第一部分。它仅从第一个表中删除,并保存用于从其他(参考)表中删除的列和偏移量。
deleting from reference tables
服务器正在执行多表删除的第二部分,并从其他表中删除匹配的行。
线程正在处理
ALTER TABLE ... DISCARD TABLESPACE
orALTER TABLE ... IMPORT TABLESPACE
语句。这发生在最后但在清理
ALTER TABLE
,CREATE VIEW
,DELETE
,INSERT
,SELECT
或UPDATE
语句之前。对于
end
状态,可能会发生以下操作:将事件写入二进制日志
释放内存缓冲区,包括 blob
线程已开始执行一条语句。
线程正在执行
init_command
系统变量值中的语句。线程执行了一个命令。此状态通常后跟
cleaning up
。服务器正准备执行自然语言全文搜索。
这发生在
ALTER TABLE
、DELETE
、INSERT
、SELECT
或UPDATE
语句的初始化之前。服务器在此状态下采取的操作包括刷新二进制日志和InnoDB
日志。有人
KILL
向该线程发送了一个语句,它应该在下次检查 kill 标志时中止。在 MySQL 的每个主要循环中都会检查该标志,但在某些情况下,线程可能仍需要很短的时间才能结束。如果该线程被其他线程锁定,则 kill 会在其他线程释放其锁定后立即生效。线程正在尝试锁定系统表(例如,时区或日志表)。
该线程正在向慢查询日志写入一条语句。
连接线程的初始状态,直到客户端已成功通过身份验证。
服务器正在启用或禁用表索引。
线程正在尝试打开系统表(例如,时区或日志表)。
该线程正在尝试打开一个表。这应该是非常快速的过程,除非有什么东西阻止打开。例如,
ALTER TABLE
orLOCK TABLE
语句可以在语句完成之前阻止打开表。还值得检查您的table_open_cache
值是否足够大。对于系统表,使用
Opening system tables
状态代替。服务器正在对查询执行初始优化。
此状态发生在查询优化期间。
服务器正准备执行就地
ALTER TABLE
.该线程正在删除不需要的中继日志文件。
此状态发生在处理查询之后但在
freeing items
状态之前。服务器正在从客户端读取数据包。
该查询的使用
SELECT DISTINCT
方式使 MySQL 无法在早期阶段优化掉不同的操作。因此,MySQL 在将结果发送给客户端之前需要一个额外的阶段来删除所有重复的行。SELECT
线程在处理语句 后正在删除内部临时表。如果没有创建临时表,则不使用此状态。该线程正在重命名表。
该线程正在处理一条
ALTER TABLE
语句,已创建新表,并正在重命名它以替换原始表。线程获得了表的锁,但在获得锁后注意到底层表结构发生了变化。它已释放锁,关闭表,并试图重新打开它。
修复代码使用排序来创建索引。
线程已完成
MyISAM
表的多线程修复。修复代码使用通过密钥缓存一个接一个地创建密钥。这比
Repair by sorting
.线程正在回滚事务。
对于
MyISAM
修复或分析等表操作,线程将新表状态保存到.MYI
文件头。状态包括行数、AUTO_INCREMENT
计数器和键分布等信息。该线程正在执行第一阶段以在更新它们之前找到所有匹配的行。如果
UPDATE
要更改用于查找相关行的索引,则必须这样做。Sending data
MySQL 8.0.17 之前:线程正在读取和处理
SELECT
语句的行,并将数据发送到客户端。由于在此状态期间发生的操作往往会执行大量磁盘访问(读取),因此它通常是给定查询生命周期内运行时间最长的状态。MySQL 8.0.17及以后版本:该状态不再单独表示,而是包含在Executing
状态中。服务器正在向客户端写入数据包。
线程正在开始一个
ALTER TABLE
操作。线程正在进行排序以满足 a
GROUP BY
。线程正在进行排序以满足
ORDER BY
.MyISAM
该线程正在对索引页进行排序,以便在表优化操作 期间进行更高效的访问。对于
SELECT
语句,这类似于Creating sort index
,但适用于非临时表。语句执行开始时的第一阶段。
服务器正在计算统计信息以制定查询执行计划。如果一个线程长时间处于这种状态,则服务器可能在执行其他工作时受磁盘限制。
线程已调用
mysql_lock_tables()
,此后线程状态未更新。这是一个非常普遍的状态,可能由于多种原因而发生。例如,线程将要请求或正在等待表的内部或外部系统锁。这可能发生
InnoDB
在执行LOCK TABLES
. 如果此状态是由外部锁请求引起的,并且您没有使用访问相同表的多个mysqld服务器,则可以使用该 选项MyISAM
禁用外部系统锁 。--skip-external-locking
但是,默认情况下禁用外部锁定,因此该选项很可能无效。对于SHOW PROFILE
,此状态表示线程正在请求锁定(而不是等待)。对于系统表,使用
Locking system tables
状态代替。线程正准备开始更新表。
该线程正在搜索要更新的行并正在更新它们。
服务器正在执行多表更新的第一部分。它只更新第一个表,并保存用于更新其他(参考)表的列和偏移量。
服务器正在执行多表更新的第二部分并更新其他表中的匹配行。
线程将要请求或正在等待通过
GET_LOCK()
调用请求的咨询锁。对于SHOW PROFILE
,此状态表示线程正在请求锁定(而不是等待)。该线程已调用一个
SLEEP()
调用。FLUSH TABLES WITH READ LOCK
正在等待提交锁。该线程正在等待事务提交,而不是查询处理的其他部分。
该线程收到通知,告知表的底层结构已更改,它需要重新打开表以获取新结构。但是,要重新打开表,它必须等到所有其他线程都关闭了相关表。
如果另一个线程在相关表上 使用
FLUSH TABLES
或使用以下语句之一, 则会 发生 此通知 : 、、、、、、或 。FLUSH TABLES
tbl_name
ALTER TABLE
RENAME TABLE
REPAIR TABLE
ANALYZE TABLE
OPTIMIZE TABLE
线程正在执行
FLUSH TABLES
并等待所有线程关闭它们的表,或者线程收到通知,表明表的底层结构已更改,需要重新打开表以获取新结构。但是,要重新打开表,它必须等到所有其他线程都关闭了相关表。如果另一个线程在相关表上 使用
FLUSH TABLES
或使用以下语句之一, 则会 发生 此通知 : 、、、、、、或 。FLUSH TABLES
tbl_name
ALTER TABLE
RENAME TABLE
REPAIR TABLE
ANALYZE TABLE
OPTIMIZE TABLE
THR_LOCK
服务器正在等待从元数据锁定子系统 获取 锁或锁,其中lock_type
指示锁的类型。此状态表示等待
THR_LOCK
:Waiting for table level lock
这些状态表示等待元数据锁定:
Waiting for event metadata lock
Waiting for global read lock
Waiting for schema metadata lock
Waiting for stored function metadata lock
Waiting for stored procedure metadata lock
Waiting for table metadata lock
Waiting for trigger metadata lock
有关表锁定指示符的信息,请参阅 第 8.11.1 节,“内部锁定方法”。有关元数据锁定的信息,请参阅第 8.11.4 节,“元数据锁定”。要查看哪些锁正在阻止锁请求,请使用 第 27.12.13 节“性能模式锁表”中描述的性能模式锁表。
线程正在等待条件变为真的一般状态。没有具体的状态信息可用。
服务器正在向网络写入数据包。