锁分析
更新时间:2024-06-28
DBSC 的锁分析功能支持直观地查看和分析数据库发生的死锁,同时提供 InnoDB 锁、元数据锁等分析功能,帮助用户消除不合理的加锁,有效减少慢查询,提升资源使用效率,预防死锁发生。本文为您介绍如何使用 DBSC 锁分析。
前提条件
- 实例已接入 DBSC,且接入状态为接入成功。
操作步骤
- 登录 DBSC 控制台。
- 在左侧导航栏,点击 诊断优化—>锁分析。
- 进入锁分析页面后,在左上方选择要查看的实例。
注意:
当前支持的数据库类型为:RDS for MySQL
- 在锁分析页面,查看目标实例当前的 死锁分析 与 其他分析 信息。
死锁分析功能如下:
- 死锁列表:查看 最近一次发生死锁 的事务列表,支持查看事务对应的锁列表。
- 可视化:支持以可视化图的形式,直观展示死锁拓扑,以事务和锁为点,展示事务和锁的请求持有关系,锁冲突为线,构成一个环。鼠标悬停在锁节点上,会展示锁详情信息,包括 锁类型、锁模式、锁数据库名、锁表名、锁索引名、记录锁类型、表空间ID、页号、偏移量 等。鼠标悬停在事务节点上,会展示事务详情信息,包括 事务序号、事务ID、事务开始时间、事务持续时间、客户端IP、客户端主机名、会话ID、用户、是否会滚、语句 等。
- 日志:查看与复制死锁日志。
其他分析功能如下:
- 事务:支持查看一段时间内最大事务运行时长与每秒事务数趋势。支持根据事物类型查看事务列表及实时统计信息。
-
InnoDB 锁:InnoDB 锁作用主要是管理并发访问共享资源,保证数据一致性,提高并发性能。该功能实时展示 InnoDB 锁信息,根据锁之间的持有和等待关系,快速定位锁的源头会话。
注意:
- 实时统计和锁表对象热点 Top 是根据锁对象表进行展示,MySQL 8.0 版本以前只有持有等待关系产生时该表才有数据,MySQL 8.0 以后会展示全部数据,所以 MySQL 8.0 之前版本和 MySQL 8.0 以后版本展示会有不同。
- 实时列表仅展示存在持有等待关系的 InnoDB 锁信息,无持有等待关系不展示。
- 当前功能支持 MySQL 5.6、5.7、8.0 版本,其中 8.0 版本需要开启 performance_schema,该参数开启需要重启实例,请慎重开启。
- 锁可视化对锁等待时长最长的 200 条进行可视化展示。
-
元数据锁:元数据锁(Metadata Lock,简称 MDL),管理对数据库对象的并发访问并确保数据的一致性。在表上有活动事务时, 对数据库对象进行元数据锁(通常是 DDL 语句)修改时的会话会被阻塞。 同时元数据锁可能会对后续的 DML 语句造成阻塞,形成阻塞堆积,影响性能。
注意:
- 当前功能对表类型的元数据锁进行展示,实时列表中展示的是存在持有等待关系的 MDL 锁信息,无持有等待关系的不展示。
- 当前仅支持 MySQL 5.7 版本,开启该功能需要在开启 performance_schema,设置 performance-schema-instrument(wait/lock/metadata/sql/mdl=ON) 和 performance_schema_max_metadata_locks(>=100),以上参数需要重启实例,请慎重开启。
- 锁可视化对锁等待时长最长的 200 条进行可视化展示。