- 文档首页
数据库工作台
MySQL 用户指南
运维管理
观测诊断
事务与锁管理
事务与锁管理
事务与锁功能可以实时捕获并分析云数据库 MySQL 版数据库中当前出现的持有锁、死锁、锁等待等状况。当数据库出现锁等待相关问题时,可运用事务与锁分析功能,直观地剖析和查看数据库中发生的相关锁信息,进而快速定位并解决相关问题,保障数据库的稳定运行,显著缩短故障排查时长。本文介绍如何在 DBW 控制台查看实例数据库内发生的所有事务与锁信息。
前提条件
- 已创建实例和账号,且实例状态处于运行中。详细操作,请参见创建实例和账号。
说明
当实例状态为创建中、恢复中、导入中、错误、已删除、关停、等待支付、计费关停中、计费恢复中、计费回收中或重建中时,不支持使用该功能。
注意事项
事务与锁功能可以实时捕获并分析云数据库 MySQL 版数据库中当前出现的持有锁、死锁、锁等待等状况。当数据库出现锁等待相关问题时,可运用事务与锁分析功能,直观地剖析和查看数据库中发生的相关锁信息,进而快速定位并解决相关问题,保障数据库的稳定运行,显著缩短故障排查时长。本文介绍如何在 DBW 控制台查看实例数据库内发生的所有事务与锁信息。
- 当实例状态为创建中、恢复中、导入中、错误、已删除、关停、等待支付、计费关停中、计费恢复中、计费回收中或重建中时,不支持使用该功能。
- 在使用事务与锁功能期间,请勿操作变更实例的相关配置,否则会导致无法正常查看实例的事务与锁信息。
- 8.0 版本的云数据库 MySQL 版实例的分析结果来源以下表:
- information_schema.INNODB_TRX:用于查看当前所有正在运行的 InnoDB 事务。
- performance_schema.data_locks:用于查看当前所有事务持有的锁(InnoDB 行锁/表锁)。
- performance_schema.data_lock_waits:用于查看当前的锁等待关系(即谁在等待谁)。
- 事务间无锁冲突时,无法检测锁的具体信息,例如事务 ID 等。
- information_schema.INNODB_TRX:用于查看当前所有正在运行的 InnoDB 事务。
- information_schema.INNODB_LOCKS:用于查看当前所有事务持有的锁(InnoDB 行锁/表锁)。
- information_schema.INNODB_LOCK_WAITS:用于查看当前的锁等待关系(即谁在等待谁)。
- 目标实例的参数 innodb_deadlock_detect 需为 ON,否则将无法查询死锁信息。具体参数配置步骤,请参见修改参数。
- 死锁信息中的请求类型涵盖 alter、show、select、update、drop、delete、create 以及其他类型。
- 分析结果来源于表 innodb status:用于实时查看 InnoDB 存储引擎的内部运行状态。
- 当 MySQL 的版本为 5.7 或以下版本时,您需要关注以下信息:
- 当出现环形死锁且该死锁内包含 3 个或以上事务时,则仅展示死锁中两个事务的详细信息。
- 当出现死锁时,可展示死锁信息中事务的详细信息,但仅有一个事务可展示他的持有锁信息。
- MySQL 8.0 实例:必须将 Performance Schema 参数配置为 ON,否则无法获取事务阻塞关系。具体配置,请参见修改参数。
- 性能评估:开启 Performance Schema 会对数据库产生一定的性能开销;此外,在负载较重的实例上查询相关监控表也可能引发性能波动,请结合业务实际情况慎重评估与操作。
- 分析数据来源:系统通过以下核心表来获取锁等待与事务阻塞的详细信息。
- information_schema.INNODB_TRX:用于查看当前所有正在运行的 InnoDB 事务状态。
- performance_schema.data_locks / data_lock_waits(适用于 MySQL 8.0):用于查看当前所有事务持有的锁(InnoDB 行锁/表锁)及具体的锁等待关系。
- information_schema.INNODB_LOCKS / INNODB_LOCK_WAITS:在 MySQL 8.0 版本之前,这两张表是分析事务与锁关系的主要来源。
- 安全操作警告:在执行锁等待分析时,请务必谨慎操作:
- MySQL 8.0 实例:查询 performance_schema.data_lock_waits 表时可能会触发全局锁,从而影响线上正常业务。
- MySQL 5.7 实例:查询 information_schema.INNODB_LOCK_WAITS 表同样存在触发全局锁的风险,进而对业务造成干扰。
- 在页面右上角的下拉列表中,选择目标数据库类型即云数据库 MySQL 版。
- 在事务与锁页签,按需选择实例节点(默认展示主节点),查看实例的事务与锁信息,具体如下表所示。
说明
若持有锁但未产生竞争,则无法查看具体锁信息。
在 InnoDB 事务与锁信息子页签,可以实现以下操作:
- 创建分析任务:在 InnoDB 事务与锁信息子页签,既可以点击创建分析手动创建分析任务,此时生成的任务来源为触发式分析;也可以在下拉列表中根据需求选择 3 秒、5 秒、10 秒或 15 秒的间隔自动创建分析任务,此时生成的任务来源为自动刷新分析。
- 查看分析结果:在 InnoDB 事务与锁信息子页签,可根据需求筛选查看分析任务的生成时间范围。默认展示最近 3 小时内的分析任务,最多可查看最近 30 天内的任务。
- 不存在事务与锁:当您创建的分析任务暂未在数据库发现事务与锁时,发现事务与锁列将显示为否,您仅能看到分析任务生成时间、任务来源、分析数据。
- 存在事务与锁:当您创建的分析任务在数据库中发现事务与锁时,发现事务与锁列将显示为是,单击分析任务生成时间列前的➕图标,您可以看到事务中包含的所有会话信息,包括会话 ID、事务 ID、事务状态、锁状态、事务隔离级别、事务执行时间(s)、事务开始时间、事务等待开始时间、正在执行 SQL、事务锁定表数、事务锁定行数、事务修改行数、阻塞事务的 ID 和 NodeId。
- 当存在事务与锁时,可单击事务与锁中的目标会话 ID,跳转至会话管理页签,在该页签可根据需求终止对应会话。详细操作,请参见终止会话。
- 当存在事务与锁时,可在正在执行 SQL 列复制对应会话执行的 SQL 语句。
在死锁信息子页签,可以实现以下操作:
- 创建分析任务:在死锁信息子页签,既可以点击创建分析手动创建分析任务,此时生成的任务来源为触发式分析;也可以在下拉列表中根据需求选择 3 秒、5 秒、10 秒或 15 秒的间隔自动创建分析任务,此时生成的任务来源为自动刷新分析。
- 查看分析结果:在死锁信息子页签,可根据需求筛选查看分析任务的生成时间范围。默认展示最近 3 小时内的分析任务,最多可查看最近 30 天内的任务。
- 不存在死锁信息:当您创建的分析任务暂未在数据库中发现死锁,发现锁列将展示为否。您仅能看到分析任务生成时间、任务来源、分析数据。
- 存在死锁信息:当您创建的分析任务在数据库中发现死锁,发现锁列将展示为是,单击分析任务生成时间列前的➕图标,您可以看到任务中的死锁信息,包括死锁发生时间、事务信息、会话 ID、请求类型、涉及表、等待锁、等待锁索引名称、等待锁类型、持有锁、持有锁索引名称、持有锁类型、涉及语句和事务处理。
说明
- 每次查询时,都将收集最近一次的死锁信息,查询结果最多可保留 30 天。
- 目标实例的参数 innodb_deadlock_detect 需设置为 ON,否则将无法查询死锁信息,具体操作,请参见修改参数。
说明
- 当 MySQL 的版本为 8.0 时,如果要获取实例的事务阻塞关系,需要将参数 Performance Schema 配置为 ON。但当 Performance Schema 配置为 ON 时,会对数据库性能产生较大影响,需慎重配置。具体参数配置步骤,请参见修改参数。
- MySQL 8.0 实例:查询 performance_schema.data_lock_waits 表时可能会触发全局锁,从而影响线上正常业务。
- MySQL 5.7 实例:查询 information_schema.INNODB_LOCK_WAITS 表同样存在触发全局锁的风险,进而对业务造成干扰。
在锁等待信息子页签,可实现以下操作:
- 创建分析任务:在锁等待信息子页签,既可以点击创建分析手动创建分析任务,此时生成的任务来源为触发式分析;也可以在下拉列表中根据需求选择 3 秒、5 秒、10 秒或 15 秒的间隔自动创建分析任务,此时生成的任务来源为自动刷新分析。
- 查看分析结果:在锁等待信息子页签,可根据需求筛选查看分析任务的生成时间范围。默认展示最近 3 小时内的分析任务,最多可查看最近 30 天内的任务。
- 不存在锁等待信息:当您创建的分析任务暂未在数据库中发现等待锁,发现锁列将展示为否。您仅能看到分析任务生成时间、任务来源、分析数据。
- 存在锁等待信息:当您创建的分析任务在数据库中发现等待锁,发现锁列将展示为是,单击分析任务生成时间列前的➕图标,您可以看到任务中的等待锁信息,包括:
- 事务 ID、事务状态、锁等待 SQL、事务开始时间、事务等待开始时间、事务修改行数、事务锁定行数和事务操作状态。
- 阻塞等待时间(s)、阻塞事务 ID、阻塞事务状态、阻塞者 SQL、阻塞事务开始时间、阻塞事务等待开始时间、阻塞事务修改行数、阻塞事务锁定行数、阻塞事务操作状态、NodeId。
您也可以单击查看详情,查看会话和阻塞事务会话的对比信息。
最近更新时间:2026.09.01 14:01:58