锁分析功能概述

当数据库出现锁等待相关问题时,您可以使用锁分析功能,直观地分析和查看数据库中发生的死锁、事务阻塞及元数据锁等待,从而迅速定位并解决相关问题,确保数据库的稳定运行。

前提条件

  • 目标数据库引擎为:

    • RDS MySQL

    • 自建MySQL

    • PolarDB MySQL版

    • PolarDB-X 2.0

  • 目标数据库实例已接入DAS,并且接入状态显示为接入正常,接入方法详情请参见接入数据库实例

注意事项

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

功能简介

锁分析功能支持对数据库实例进行多维度的死锁分析、事务阻塞分析、元数据锁等待分析。

重要

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

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

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

  • 其他锁分析: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使用该数据)分析事务阻塞关系,并生成相应的关系图。

      说明

      事务阻塞分析功能不支持PolarDB MySQL版 5.6实例。

数据库实例参数限制

目标数据库必须设置相应的参数后,才能使用锁分析的对应功能。

锁分析功能

涉及的数据库实例参数

最近死锁分析

开启innodb_deadlock_detect参数。

全量死锁分析

  • 开启innodb_deadlock_detect参数。

  • 开启innodb_print_all_deadlocks参数,并将log_error_verbosity(仅RDS MySQL需要设置)参数值设置为3。

其他锁分析中的事务阻塞分析

对于RDS MySQL 8.0和PolarDB MySQL版 8.0实例,需要开启performance_schema参数。

修改数据库实例参数:

相关文档

后续操作

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