本文介绍如何使用DAS锁分析功能对数据库进行元数据锁等待分析和事务阻塞分析。
文中所示图片中的数据为测试用例数据,实际使用过程中,请以实际数据参数为准,包括线程ID、SQL语句等。
前提条件
-
目标数据库引擎为:
-
RDS MySQL
-
PolarDB MySQL版
-
-
目标数据库实例已接入DAS,并且接入状态显示为接入正常,接入方法详情请参见接入数据库实例。
-
已开通DAS运维服务(原经济版)。
重要-
DAS运维服务(原经济版)目前仅支持部分地域,详情请参见各个版本支持的数据库和地域。
-
开通DAS运维服务(原经济版)请参见管理运维服务(原经济版)。
-
锁类型
-
元数据锁分析
-
分析数据:根据
information_schema.processlist等的数据,推导锁等待关系,并生成相应的关系图。
-
-
事务阻塞分析
重要事务阻塞分析功能不支持PolarDB MySQL版 5.6实例。
-
分析数据:根据
information_schema.processlist,information_schema.innodb_trx,以及以下表中数据,分析事务阻塞关系,并生成相应的关系图。-
RDS MySQL 5.6、5.7:
information_schema.innodb_lock_waits -
PolarDB MySQL 5.7:
information_schema.innodb_lock_waits -
RDS MySQL和PolarDB MySQL 8.0:
performance_schema.data_lock_waits
-
-
参数设置:对于RDS MySQL 8.0和PolarDB MySQL版 8.0实例,需要开启
performance_schema参数。修改数据库实例参数:-
RDS MySQL请参见设置实例参数。
-
PolarDB MySQL版请参见设置集群参数和节点参数。
-
-
触发方式
-
锁分析-触发式分析:在锁分析页面,可以手动触发其他锁分析。
-
实例会话-自动式分析:在刷新实例会话页面时,会自动触发其他锁分析。
锁分析-触发式分析
创建分析
登录DAS控制台。
在左侧导航栏中,单击智能运维中心 > 实例监控。
找到目标实例,单击实例ID,进入目标实例详情页。
-
在左侧导航栏中,单击锁分析,在锁分析页面中其他锁分析项下,点击创建分析,发起其他锁分析。
查看详情
单击诊断结果前的
可以查看元数据锁等待和事务阻塞分析相关信息。在其他锁分析页面,展开一条诊断记录后,可查看锁类型详情,包括元数据锁(被阻塞会话数 2)和事务锁(被阻塞会话数 2)。单击对应锁类型右侧的查看详情可查看具体阻塞信息。
事务锁详情
点击列表中事务锁操作列的查看详情,会显示对应事务锁详细信息的两种查看方式:
-
列表:在事务锁详情列表可以查看被阻塞事务的详细信息。列表:以表格形式展示事务锁详情,包含ID、用户、主机、数据库名、命令、被阻塞的事务等列。单击被阻塞的事务列的查看详情链接,弹窗展示被阻塞事务的详细信息,包含ID、用户、主机、数据库名、命令、执行时间(秒)、状态和SQL等字段。
-
视图:以事务等待关系可视化的形式展示锁详情,点击对应的会话图块可以在下方查看对应会话的详细信息。视图:在视图页签中以图形方式展示事务锁依赖关系,持有锁的会话节点位于顶部,通过LOCK WAIT连线指向等待锁的会话。单击会话节点可展开详情面板,查看ID、事务状态、事务锁定行数、事务锁定表数量、事务更新行数等信息。
元数据锁详情
点击列表中元数据锁操作列的查看详情,会显示对应元数据锁详细信息的视图。在视图中,点击对应的会话图块可以在下方查看对应会话的详细信息,同时支持KILL相关会话的操作。元数据锁诊断页面展示锁关系图,包含可疑会话(1) Metadata Lock、表students DDL会话(1)和表students 其他会话(1)三个节点,箭头标注"Waiting for table metadata lock"表示等待关系。展开可疑会话详情:ID为197889,用户为das,主机地址部分脱敏,数据库为das,命令为Sleep,执行时间176秒。底部提供结束选中会话、结束全部可疑会话、结束全部DDL语句三个操作按钮用于处理元数据锁问题。
结合SQL洞察和审计分析
可疑会话处于Sleep状态没有SQL信息,可能是该会话开启了事务,相关SQL已经执行结束,但事务未提交或者回滚,此时可以在目标实例左侧导航栏中,单击SQL洞察和审计,在审计页面点击开启高级查询,填入可疑会话的线程ID,查询分析相关会话执行过的SQL情况。如示例中的事务未提交,导致锁等待。在审计页签下,展开设置查询条件高级查询表单,设置时间范围为 2024年11月4日 14:34:49 至 2024年11月4日 16:49:49,在线程ID中填入 197889,单击查询按钮。下方日志列表中展示该线程在指定时间段内执行的SQL记录,包括 update students set name=UUID() where id = 3(执行时间 2024-11-04 16:27:22.426)和 begin(执行时间 2024-11-04 16:27:21.322)。
实例会话-自动式分析
操作步骤
登录DAS控制台。
在左侧导航栏中,单击智能运维中心 > 实例监控。
找到目标实例,单击实例ID,进入目标实例详情页。
-
在左侧导航栏中,单击实例会话,在会话管理页面中会自动触发其他锁分析,分析的结果会显示在页面右上角。在实例详情页的会话页面,查看顶部指标区中的是否存在锁等待状态,当前显示为否,表示不存在锁等待。可单击查看详情进一步分析锁等待情况。
实例会话页面查看详情
在实例会话中,当有锁等待时,点击查看详情,在抽屉页可以分别查看事务锁(如有)、元数据锁(如有)。在DAS实例会话页面,顶部指标区显示活跃会话6、CPU使用率0.3%、连接使用率0.1%、异常4,是否存在锁等待显示为是。下方会话列表中可见部分会话状态为Waiting for table metadata lock,表明存在锁等待阻塞。单击查看详情可进一步分析锁等待关系。
事务锁详情
点击事务锁列表中操作列的查看详情,可以查看对应事务锁详细信息的两种查看方式(列表、视图),查看方式与锁分析-触发式分析中一致,请参见触发式分析-事务锁详情。
在 锁等待 弹窗的 事务锁 页签中,表格展示 锁类型 和 被阻塞会话数 信息。
元数据锁详情
点击元数据锁列表中操作列的查看详情,可以查看对应元数据锁详细信息的视图,查看方式与锁分析-触发式分析中一致,详情请参见触发式分析-元数据锁详情。
在 锁等待 弹窗的 元数据锁 页签中,视图展示锁持有与等待关系。
锁分析页面查看详情
在锁分析页面,单击诊断结果前的
可以查看到历史在实例会话页面自动发起的其他锁分析统计信息。对应的查看方式与锁分析-触发式分析中一致,请参见触发式分析-查看详情。在其他锁分析页面,选择时间范围后单击查看,在诊断列表中找到发现锁为是的记录并展开,可查看锁类型(元数据锁、事务锁)及对应的被阻塞会话数,单击查看详情进入锁详情页面。