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 临时表,则数据库不使用行级锁定,这可能会导致表锁定。MyISAM
和 MEMORY
表是非 InnoDB 临时表的示例。如果您使用的是非 InnoDB 临时表,请考虑切换到 InnoDB 内存表。