synch/cond/mysys/my_thread_var::suspend - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

synch/cond/mysys/my_thread_var::suspend

synch/cond/mysys/my_thread_var::suspend 等待事件表示线程因等待条件而暂停。

支持的引擎版本

以下版本支持此等待事件信息:

  • Aurora MySQL 版本 2,最高 2.09.2

  • Aurora MySQL 版本 1,最高 1.23.1

上下文

事件 synch/cond/mysys/my_thread_var::suspend 表示线程因等待条件而暂停。例如,此等待事件发生在线程等待表级别锁定时。在此情况下,我们建议调查工作负载,以确定哪些线程可能正获取数据库实例上的表锁定。

等待次数增加的可能原因

synch/cond/mysys/my_thread_var::suspend 事件的发生率超过正常(可能表示性能问题)时,典型原因包括以下几点:

线程正在等待表级锁定

一个或多个线程正在等待表级锁定。在这种情况下,线程状态为 Waiting for table level lock

正发送到 mysqldump 客户端的数据

一个或多个线程正在等待,因为您正在使用 mysqldump,且结果正在发送到 mysqldump 客户端。在这种情况下,线程状态为:Writing to net

操作

根据等待事件的原因,我们建议采取不同的操作。

避免锁定表

确保应用程序没有使用 LOCK TABLE 语句明确锁定表。您可以使用高级审计来检查应用程序运行的语句。有关更多信息,请参阅 在 Amazon Aurora MySQL 数据库集群中使用高级审计

确保备份工具不会锁定表

如果您使用的是备份工具,请确保该工具未锁定表。例如,如果您使用 mysqldump,请使用 --single-transaction 选项,以便它不会锁定表。

锁定表的长时间运行的会话

可能存在明确锁定了表的长时间运行会话。运行以下 SQL 语句以检查此类会话。

SELECT p.id as session_id, p.user, p.host, p.db, p.command, p.time, p.state, SUBSTRING(p.info, 1, 50) AS INFO, t.trx_started, unix_timestamp(now()) - unix_timestamp(t.trx_started) as trx_age_seconds, t.trx_rows_modified, t.trx_isolation_level FROM information_schema.processlist p LEFT JOIN information_schema.innodb_trx t ON p.id = t.trx_mysql_thread_id;

当您识别会话时,您的选项包括:

  • 联系应用程序拥有者或用户。

  • 如果阻止会话处于空闲状态,请考虑结束阻止会话。此操作可能会触发长时间回滚。要了解如何结束会话,请参阅《Amazon RDS 用户指南》中的结束会话或查询

有关识别阻止事务的更多信息,请参阅 MySQL 文档中的使用 InnoDB 事务和锁定信息

非 InnoDB 临时表

如果您使用的是非 InnoDB 临时表,则数据库不使用行级锁定,这可能会导致表锁定。MyISAMMEMORY 表是非 InnoDB 临时表的示例。如果您使用的是非 InnoDB 临时表,请考虑切换到 InnoDB 内存表。