Aurora MySQL 线程状态 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Aurora MySQL 线程状态

以下是 Aurora MySQL 的一些常见的线程状态。

检查权限

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

检查查询缓存以进行查询

服务器正在检查查询缓存中是否存在当前查询。

已清除

这是连接的最终状态,其工作已完成但客户端尚未关闭。最好的解决方案是在代码中明确关闭连接。或者您可以在参数组中设置较低的 wait_timeout 值。

关闭表

线程正在将更改后的表数据刷新到磁盘并关闭使用过的表。如果这不是快速操作,请根据实例类网络带宽验证网络带宽消耗指标。另外,请检查 table_open_cachetable_definition_cache 参数的参数值是否允许同时打开足够的表,以使引擎不需要频繁地打开和关闭表。这些参数会影响实例的内存消耗。

将 HEAP 转换为 MyISAM

该查询正在将临时表从内存中的表转换为磁盘上的表。这种转换是必要的,因为 MySQL 在查询处理的中间步骤中创建的临时表对内存来说太大了。检查 tmp_table_sizemax_heap_table_size 的值。在更高版本中,此线程状态名称为 converting HEAP to ondisk

将 HEAT 转换为磁盘上

线程正在将内部临时表从内存中的表转换为磁盘上的表。

复制到 tmp 表

线程正在处理 ALTER TABLE 语句。此状态发生在具有新结构的表创建之后,但在将行复制到该表中之前。对于处于此状态的线程,您可以使用性能架构获取有关复制操作进度的信息。

创建排序索引

Aurora MySQL 正在执行一种排序,因为它不能使用现有的索引来满足查询的 ORDER BYGROUP BY 子句。有关更多信息,请参阅创建排序索引

创建表

该线程正在创建一个永久表或临时表。

延迟提交确定完成

Aurora MySQL 中的异步提交已收到确认并已完成。

延迟提交确定启动

Aurora MySQL 线程已启动异步提交过程,但正在等待确认。这通常是事务的真正提交时间。

延迟发送确定完成

在向客户端发送响应时,可以释放绑定到连接的 Aurora MySQL 工作线程。线程可以开始其他工作。状态 delayed send ok 意味着对客户端的异步确认已完成。

延迟发送确定已启动

Aurora MySQL 工作线程已异步向客户端发送响应,现在可以自由地为其他连接工作。事务已启动一个尚未确认的异步提交过程。

executing

线程已经开始运行语句。

释放项目

线程已运行命令。在此状态下完成的一些项目释放涉及到查询缓存。这种状态之后通常是清理。

init

此状态发生在 ALTER TABLEDELETEINSERTSELECT 或者 UPDATE 语句的初始化之前。处于此状态的操作包括刷新二进制日志或 InnoDB 日志,以及清理查询缓存。

主节点已将所有二进制日志发送给从节点

主节点已完成其复制的一部分。线程正在等待更多查询运行,以便可以写入二进制日志 (binlog)。

打开表

线程正在尝试打开一张表。除非 ALTER TABLE 或者 LOCK TABLE 语句需要完成,或者它超出了 table_open_cache 的值,否则此操作会快速完成。

正在优化

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

正在准备

在查询优化期间会出现此状态。

查询结束

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

删除重复项

Aurora MySQL 无法在查询的早期阶段优化 DISTINCT 操作。Aurora MySQL 必须先删除所有重复的行,然后才能将结果发送给客户端。

搜索行以进行更新

在更新它们之前,线程会查找所有匹配的行。如果 UPDATE 正在更改引擎用来查找行的索引,这个阶段有必要。

向从节点发送二进制日志事件

线程从二进制日志中读取事件并将其发送到副本。

向客户端发送缓存的结果

服务器正在从查询缓存中获取查询的结果并将其发送到客户端。

发送数据

线程正在读取和处理 SELECT 语句的行,但尚未开始向客户端发送数据。该过程是确定哪些页面包含满足查询所需的结果。有关更多信息,请参阅发送数据

发送给客户端

服务器正在向客户端写入数据包。在早期的 MySQL 版本中,此等待事件被标记为 writing to net

starting

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

统计数据

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

将结果存储在查询缓存中

服务器正在将查询结果存储在查询缓存中。

系统锁定

线程已调用 mysql_lock_tables,但是自调用以来,线程状态尚未更新。出现这种普遍状态的原因很多。

update

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

更新

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

用户锁定

该线程发出 GET_LOCK 调用。该线程在请求一个咨询锁并在等待该锁,或者计划请求咨询锁。

等待更多更新

主节点已完成其复制的一部分。线程正在等待更多查询运行,以便可以写入二进制日志 (binlog)。

等待架构元数据锁定

这是等待元数据锁定。

等待存储的函数元数据锁定

这是等待元数据锁定。

等待存储的过程元数据锁定

这是等待元数据锁定。

等待表刷新

线程正在执行 FLUSH TABLES 并且正在等待所有线程关闭他们的表。或者线程收到通知,指示表格的底层结构发生了变化,因此它必须重新打开表格以获得新结构。要重新打开表格,线程必须等到所有其他线程都关闭表格。如果另一个线程使用了表格上的以下语句之一,则会发出此通知:FLUSH TABLESALTER TABLERENAME TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE

等待表级锁定

一个会话在表上保持锁定,而另一个会话则试图在同一个表上获取同一个锁定。

等待表元数据锁定

Aurora MySQL 使用元数据锁定来管理对数据库对象的并发访问并确保数据一致性。在此等待事件中,一个会话在表上保持元数据锁定,而另一个会话则试图在同一个表上获取同一个锁定。启用性能架构后,此线程状态将报告为等待事件 synch/cond/sql/MDL_context::COND_wait_status

写入网络

服务器正在向网络写入数据包。在以后的 MySQL 版本中,此等待事件被标记为 Sending to client