当您的数据库业务查询发生锁等待后,可以使用锁等待关系溯源分析功能,基于SQL审计数据快速定位持有锁的SQL语句。该功能帮助您缩短锁问题的排查时间,无需手动翻阅大量审计日志。
适用范围
数据库实例为RDS MySQL或PolarDB MySQL实例,且默认存储引擎为InnoDB。
数据库实例已接入DAS,并且接入状态显示为接入正常,接入方法详情请参见接入数据库实例。
数据库实例的版本及所在地域支持DAS企业版V3或审计日志功能,详情请参见产品系列及支持的功能。
数据库实例已开启DAS企业版V3或审计日志功能的热存储数据,详情请参见DAS审计日志介绍。
功能简介
锁等待关系溯源分析基于DAS企业版V3或审计日志功能的热存储。该功能分析目标SQL在等待锁期间,同一实例内哪些SQL语句可能持有该锁,并通过视图和列表两种形式展示可疑阻塞源及其与目标SQL的锁等待关系。
溯源分析仅根据审计日志中的时间窗口、表名、事务等信息进行推断,该功能的分析结果为可疑阻塞源而非确定性结论,仅供参考。
使用限制
支持的SQL类型:仅支持分析以下类型的被阻塞SQL:UPDATE、DELETE、INSERT、SELECT(含SELECT ... FOR UPDATE / LOCK IN SHARE MODE)、ALTER、FLUSH TABLES、LOCK TABLES。不支持分析其他类型SQL,如SET、SHOW、USE、DESCRIBE等。
锁等待时长门槛:被阻塞SQL的锁等待时长需大于等于3秒,低于此阈值的锁等待无法触发分析。
分析时间窗口:仅扫描目标SQL执行时间点前2小时内的热存储审计数据,超出窗口的SQL不会纳入分析。同时,被阻塞SQL的审计记录必须在热存储保留期内,如果审计数据已过期或被清理,将无法创建分析任务。
溯源任务数量:同一实例一次只能运行一个锁等待溯源分析任务,需等待前一个任务完成后才能发起新的分析。
事务ID可用性:当事务ID不可用时(详见审计),溯源分析会使用基于线程ID的推断模式,该模式下事务边界推断可能不够精确。
操作步骤
创建分析任务
登录DAS控制台。
找到目标实例,单击实例ID,进入目标实例详情页。
在左侧导航栏中,选择,然后在右侧打开的页面中单击审计页签。
设置搜索条件后单击查询,在日志列表中找到目标SQL。
在目标SQL的操作列,单击锁等待分析进行分析。
查看分析结果
您可以通过以下两种方式查看分析结果:
方式一:在审计页面直接查看
在审计页面触发分析后,等待分析完成即可查看结果。
方式二:在历史任务列表查看
在页面中,前往SQL分析页签的锁等待分析栏,查看历史分析任务列表,在对应任务的操作列单击查看详情打开结果。
说明历史任务列表支持查看近一个月内创建的任务。
您可以通过三种模式查看分析结果详情:
视图:以图形方式展示可疑阻塞源与目标SQL的锁等待关系。持有锁的可疑阻塞源节点位于顶部,通过箭头连线指向等待锁的目标SQL。每个节点展示SQL语句开始执行时间、自身持锁时长(阻塞源)或锁等待时长(目标SQL)、线程、所属事务状态等信息。
列表:以表格形式展示可疑阻塞源详情,包含SQL ID、SQL文本、事务ID、线程ID、开始时间、持锁时长等字段。
AI解读:在结果详情页面中单击AI解读,或在历史分析任务列表的操作列单击
图标,可查看DAS Agent对于该锁等待分析的结果解读。
后续操作
获取可疑阻塞源详情后,您可以进行以下操作:
在SQL洞察和审计页面单击SQL洞察页签,在全量请求统计区域通过SQL ID分析阻塞源SQL的执行频率,以确认该SQL是否频繁与目标SQL组合出现。如果锁等待频繁发生,请及时优化业务上的事务使用逻辑,从根源上降低锁冲突概率。
如果锁等待正在实时发生,可以使用其他锁分析分析MDL或者事务阻塞。