锁等待关系溯源分析

更新时间:
复制 MD 格式

当您的数据库业务查询发生锁等待后,可以使用锁等待关系溯源分析功能,基于SQL审计数据快速定位持有锁的SQL语句。该功能帮助您缩短锁问题的排查时间,无需手动翻阅大量审计日志。

适用范围

  • 数据库实例为RDS MySQLPolarDB 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的推断模式,该模式下事务边界推断可能不够精确。

操作步骤

创建分析任务

  1. 登录DAS控制台

  2. 在左侧导航栏中,选择智能运维中心 > 实例监控

  3. 找到目标实例,单击实例ID,进入目标实例详情页。

  4. 在左侧导航栏中,选择请求分析 > SQL洞察和审计,然后在右侧打开的页面中单击审计页签。

  5. 设置搜索条件后单击查询,在日志列表中找到目标SQL。

  6. 在目标SQL操作列,单击锁等待分析进行分析。

查看分析结果

您可以通过以下两种方式查看分析结果:

  • 方式一:在审计页面直接查看

    审计页面触发分析后,等待分析完成即可查看结果。

  • 方式二:在历史任务列表查看

    请求分析 > SQL洞察和审计页面中,前往SQL分析页签的锁等待分析栏,查看历史分析任务列表,在对应任务的操作列单击查看详情打开结果。

    说明

    历史任务列表支持查看近一个月内创建的任务。

您可以通过三种模式查看分析结果详情:

  • 视图:以图形方式展示可疑阻塞源与目标SQL的锁等待关系。持有锁的可疑阻塞源节点位于顶部,通过箭头连线指向等待锁的目标SQL。每个节点展示SQL语句开始执行时间、自身持锁时长(阻塞源)或锁等待时长(目标SQL)、线程、所属事务状态等信息。

  • 列表:以表格形式展示可疑阻塞源详情,包含SQL ID、SQL文本、事务ID、线程ID、开始时间、持锁时长等字段。

  • AI解读:在结果详情页面中单击AI解读,或在历史分析任务列表的操作列单击image图标,可查看DAS Agent对于该锁等待分析的结果解读。

后续操作

获取可疑阻塞源详情后,您可以进行以下操作:

  • SQL洞察和审计页面单击SQL洞察页签,在全量请求统计区域通过SQL ID分析阻塞源SQL的执行频率,以确认该SQL是否频繁与目标SQL组合出现。如果锁等待频繁发生,请及时优化业务上的事务使用逻辑,从根源上降低锁冲突概率。

  • 如果锁等待正在实时发生,可以使用其他锁分析分析MDL或者事务阻塞。