文档

分析RDS MySQL的死锁

更新时间:

当面临RDS MySQL的死锁问题时,您可以使用锁分析功能,直观地查看和分析数据库最近一次发生的死锁,从而快速定位和解决死锁问题,确保数据库的稳定运行。

前提条件

  • 实例为如下版本:

    • RDS MySQL 8.0 高可用系列或集群系列

    • RDS MySQL 5.7 高可用系列或集群系列

    • RDS MySQL 5.6 高可用系列

    • RDS MySQL 5.5 高可用系列

  • 数据库实例innodb_deadlock_detect参数取值为ON。修改数据库实例参数请参见设置实例参数

功能简介

锁分析功能支持对数据库实例进行多维度的死锁分析。

重要

全量死锁分析其他锁分析功能需要开启DAS经济版或DAS企业版。需注意,DAS经济版和DAS企业版目前仅支持部分地域,详情请参见各个版本支持的数据库和地域。开通DAS经济或企业版请参见开通经济版和企业版

  • 最近死锁分析:DAS基于SHOW ENGINE INNODB STATUS返回的最近一次死锁日志进行分析。如果发生过多次死锁,DAS只会对最近一次死锁进行分析。

  • 全量死锁分析:DAS定时对错误日志进行分析,解析其中的死锁信息,并进行全面的死锁分析。同时,DAS支持查看指定时间范围内的死锁趋势以及各个死锁的详细信息。

    重要

    使用全量死锁分析,需要开启innodb_print_all_deadlocks参数,并将log_error_verbosity参数值设置为3。修改数据库实例参数请参见设置实例参数

  • 其他锁分析:DAS根据information_schemaperformance_schema相关数据,实时分析数据库实例当前会话中的元数据锁和事务阻塞情况。

    • 元数据锁分析:DAS根据information_schema.processlist等的数据,推导锁等待关系,并生成相应的关系图。

    • 事务阻塞分析:DAS根据information_schema.processlistinformation_schema.innodb_trx,以及information_schema.innodb_lock_waits(MySQL 5.6和5.7使用该数据)和performance_schema.data_lock_waits(MySQL 8.0使用该数据)分析事务阻塞关系,并生成相应的关系图。

注意事项

死锁分析目前不支持分析包含“TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION”描述的死锁。

操作步骤

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏中,选择自治服务 > 一键诊断

  3. 单击锁分析页签。

  4. 锁分析页面,单击左侧立即诊断

  5. 在新生成的死锁诊断列表右侧,在详情栏中单击查看详情

  6. 锁分析页面,查看或诊断数据库实例最近发生过的死锁。

    • 最近死锁分析

      • 最近死锁分析页签,单击创建分析,DAS基于SHOW ENGINE INNODB STATUS返回的最近一次死锁日志进行分析。

      • 选择时间段,查看该时间段内的死锁诊断结果。单击诊断结果详情列的查看详情,查看死锁诊断的详细结果。

    • 全量死锁分析

      全量死锁分析页签,查看指定时间范围内的死锁趋势以及各个死锁的详细信息。

    • 其他锁分析

      • 其他锁分析页签,单击创建分析,DAS根据information_schemaperformance_schema相关数据,实时分析数据库实例当前会话中的元数据锁和事务阻塞情况。

      • 选择时间段,查看该时间段内的诊断结果。

        1. 单击诊断结果前的image查看锁分析的统计信息。

        2. 单击统计信息操作列的查看详情,查看诊断的详细结果和锁分析关系图。

          鼠标悬停到对应会话上时,可以查看选中会话关联的锁等待关系。单击该会话,可以查看选中会话的详细信息。

后续操作

当数据库实例出现死锁时,您可以利用锁分析所得的事务线程ID等信息,在SQL洞察和审计中分析相关事务执行情况,以确认死锁的原因。例如,在事务开启后,当更新了一定数量的数据行后,这些数据行会被锁定。如果事务持续时间较长而未提交或回滚(包括隐式提交和隐式回滚),那么后续的会话或事务在更新相同的数据行时,就会进入LOCK WAIT状态。

  • 本页导读 (1)
文档反馈