Aurora MySQL 线程状态
以下是 Aurora MySQL 的一些常见的线程状态。
- 检查权限
-
线程正在检查服务器是否具有运行语句所需的权限。
- 检查查询缓存以进行查询
-
服务器正在检查查询缓存中是否存在当前查询。
- 已清除
-
这是连接的最终状态,其工作已完成但客户端尚未关闭。最好的解决方案是在代码中明确关闭连接。或者您可以在参数组中设置较低的
wait_timeout
值。 - 关闭表
-
线程正在将更改后的表数据刷新到磁盘并关闭使用过的表。如果这不是快速操作,请根据实例类网络带宽验证网络带宽消耗指标。另外,请检查
table_open_cache
和table_definition_cache
参数的参数值是否允许同时打开足够的表,以使引擎不需要频繁地打开和关闭表。这些参数会影响实例的内存消耗。 - 将 HEAP 转换为 MyISAM
-
该查询正在将临时表从内存中的表转换为磁盘上的表。这种转换是必要的,因为 MySQL 在查询处理的中间步骤中创建的临时表对内存来说太大了。检查
tmp_table_size
和max_heap_table_size
的值。在更高版本中,此线程状态名称为converting HEAP to ondisk
。 - 将 HEAT 转换为磁盘上
-
线程正在将内部临时表从内存中的表转换为磁盘上的表。
- 复制到 tmp 表
-
线程正在处理
ALTER TABLE
语句。此状态发生在具有新结构的表创建之后,但在将行复制到该表中之前。对于处于此状态的线程,您可以使用性能架构获取有关复制操作进度的信息。 - 创建排序索引
-
Aurora MySQL 正在执行一种排序,因为它不能使用现有的索引来满足查询的
ORDER BY
或GROUP BY
子句。有关更多信息,请参阅 创建排序索引。 - 创建表
-
该线程正在创建一个永久表或临时表。
- 延迟提交确定完成
-
Aurora MySQL 中的异步提交已收到确认并已完成。
- 延迟提交确定启动
-
Aurora MySQL 线程已启动异步提交过程,但正在等待确认。这通常是事务的真正提交时间。
- 延迟发送确定完成
-
在向客户端发送响应时,可以释放绑定到连接的 Aurora MySQL 工作线程。线程可以开始其他工作。状态
delayed send ok
意味着对客户端的异步确认已完成。 - 延迟发送确定已启动
-
Aurora MySQL 工作线程已异步向客户端发送响应,现在可以自由地为其他连接工作。事务已启动一个尚未确认的异步提交过程。
- executing
-
线程已经开始运行语句。
- 释放项目
-
线程已运行命令。在此状态下完成的一些项目释放涉及到查询缓存。这种状态之后通常是清理。
- init
-
此状态发生在
ALTER TABLE
、DELETE
、INSERT
、SELECT
或者UPDATE
语句的初始化之前。处于此状态的操作包括刷新二进制日志或 InnoDB 日志,以及清理查询缓存。 - 源已将所有二进制日志发送给副本;正在等待更多更新
-
主节点已完成其复制的一部分。线程正在等待更多查询运行,以便可以写入二进制日志 (binlog)。
- 打开表
-
线程正在尝试打开一张表。除非
ALTER TABLE
或者LOCK TABLE
语句需要完成,或者它超出了table_open_cache
的值,否则此操作会快速完成。 - 正在优化
-
服务器正在对查询执行初始优化。
- 正在准备
-
在查询优化期间会出现此状态。
- 查询结束
-
此状态发生在处理查询之后但在释放项目状态之前。
- 删除重复项
-
Aurora MySQL 无法在查询的早期阶段优化
DISTINCT
操作。Aurora MySQL 必须先删除所有重复的行,然后才能将结果发送给客户端。 - 搜索行以进行更新
-
在更新它们之前,线程会查找所有匹配的行。如果
UPDATE
正在更改引擎用来查找行的索引,这个阶段有必要。 - 向从节点发送二进制日志事件
-
线程从二进制日志中读取事件并将其发送到副本。
- 向客户端发送缓存的结果
-
服务器正在从查询缓存中获取查询的结果并将其发送到客户端。
- 发送数据
-
线程正在读取和处理
SELECT
语句的行,但尚未开始向客户端发送数据。该过程是确定哪些页面包含满足查询所需的结果。有关更多信息,请参阅 发送数据。 - 发送给客户端
-
服务器正在向客户端写入数据包。在早期的 MySQL 版本中,此等待事件被标记为
writing to net
。 - starting
-
这是语句执行开始的第一阶段。
- statistics
-
服务器正在计算统计数据以制定查询执行计划。如果线程长期处于此状态,则在执行其他工作时,服务器可能会绑定磁盘。
- 将结果存储在查询缓存中
-
服务器正在将查询结果存储在查询缓存中。
- 系统锁定
-
线程已调用
mysql_lock_tables
,但是自调用以来,线程状态尚未更新。出现这种普遍状态的原因很多。 - 更新
-
线程正在准备开始更新表格。
- 更新
-
线程正在搜索行并更新它们。
- 用户锁定
-
该线程发出
GET_LOCK
调用。该线程在请求一个咨询锁并在等待该锁,或者计划请求咨询锁。 - 等待更多更新
-
主节点已完成其复制的一部分。线程正在等待更多查询运行,以便可以写入二进制日志 (binlog)。
- 等待架构元数据锁定
-
这是等待元数据锁定。
- 等待存储的函数元数据锁定
-
这是等待元数据锁定。
- 等待存储的过程元数据锁定
-
这是等待元数据锁定。
- 等待表刷新
-
线程正在执行
FLUSH TABLES
并且正在等待所有线程关闭他们的表。或者线程收到通知,指示表格的底层结构发生了变化,因此它必须重新打开表格以获得新结构。要重新打开表格,线程必须等到所有其他线程都关闭表格。如果另一个线程使用了表格上的以下语句之一,则会发出此通知:FLUSH TABLES
、ALTER TABLE
、RENAME TABLE
、REPAIR TABLE
、ANALYZE TABLE
或OPTIMIZE TABLE
。 - 等待表级锁定
-
一个会话在表上保持锁定,而另一个会话则试图在同一个表上获取同一个锁定。
- 等待表元数据锁定
-
Aurora MySQL 使用元数据锁定来管理对数据库对象的并发访问并确保数据一致性。在此等待事件中,一个会话在表上保持元数据锁定,而另一个会话则试图在同一个表上获取同一个锁定。启用性能架构后,此线程状态将报告为等待事件
synch/cond/sql/MDL_context::COND_wait_status
。 - 写入网络
-
服务器正在向网络写入数据包。在以后的 MySQL 版本中,此等待事件被标记为
Sending to client
。