METADATA_LOCKS

最近更新时间:2025-04-22 15:40:02

我的收藏

功能

METADATA_LOCKS记录着当前 SQLEngine 元数据锁的占用情况,包含:
已授予的锁:显示哪些会话当前拥有哪些元数据锁。
已请求但尚未授予的锁:显示哪些会话正在等待哪些元数据锁。
已被死锁检测器终止的锁定请求。
已超时并等待请求会话释放锁的锁请求。
方便用户快速定位元数据锁(Metadata Locks,MDL)相关的问题,提高系统的稳定性和性能。

字段说明

字段名
类型
描述
OBJECT_TYPE
varchar(64)
锁定的对象类型,例如 TABLE、SCHEMA、FUNCTION、MC 等。
其中 MC 是 TDSQL 新增的全局对象锁,在集群层面对数据库对象加锁。
OBJECT_SCHEMA
varchar(64)
锁定对象所在的数据库名称。
OBJECT_NAME
varchar(64)
锁定对象的名称。
COLUMN_NAME
varchar(64)
锁定对象的具体列名称。
OBJECT_INSTANCE_BEGIN
bigint unsigned
锁定对象在内存中的地址。
LOCK_TYPE
varchar(32)
锁的类型。
INTENTION_EXCLUSIVE:意图独占锁。这种锁通常用于表示一个事务打算获取一个独占锁,但目前还没有实际获取到。
SHARED:共享锁。允许多个事务同时持有这种锁,但阻止任何事务获取独占锁。
SHARED_HIGH_PRIO:高优先级共享锁。这是一种特殊类型的共享锁,用于高优先级的事务。
SHARED_READ:共享读锁。允许事务读取数据,但阻止其他事务写入或获取独占锁。
SHARED_UPGRADABLE:可升级的共享锁。这种锁允许事务在持有共享锁的同时尝试获取独占锁,而不会被阻塞。
SHARED_NO_WRITE:不允许写的共享锁。这种锁可能阻止事务写入数据,但允许读取。
SHARED_NO_READ_WRITE:不允许读写的共享锁。这种锁阻止事务读取和写入数据。
EXCLUSIVE:独占锁。只允许一个事务持有这种锁,阻止其他事务获取任何类型的锁。
LOCK DURATION
varchar(32)
锁的持续时间,例如 TRANSACTION、 LONG 等。
LOCK STATUS
varchar(32)
表示每个锁的状态:
PENDING:当元数据锁被请求但未立即获得时,插入一行状态为 PIDDEN 的记录。
GRANTED:当元数据锁被请求并立即获得时,插入一行状态为GRANTED 的记录。
VICTIM:当死锁检测器取消挂起的锁请求以打破死锁(ER_LOCK_DEADLOCK)时,将其行状态从 PENDING 更新为VICTIM。这表示该锁行即将被删除。
TIMEOUT:当挂起的锁请求超时(ER_LOCK_WAIT_TIMEOUT)时,将其行状态从 PENDING 更新为 TIMEOUT。这表示该锁行即将被删除。
KILLED:当被授予的锁或挂起的锁请求被终止时,将其行状态从GRANTED 或 PENDING 更新为 KILLED。这表示该锁行即将被删除。
SOURCE
varchar(64)
包含生成事件的已检测代码的源文件的名称以及文件中发生检测的行号。
OWNER THREAD_ID
bigint unsigned
持有锁的线程 ID。
OWNER_EVENT ID
bigint unsigned
请求元数据锁的事件ID。

示例

#session1
BEGIN
UPDATE test1 SET k = 0 WHERE id = 999;

#session2
ALTER TABLE test1 ADD COLUMN new_column VARCHAR(255);

#查看metadata_locks可以看到ddl获取元数据锁被挂起
tdsql [performance_schema]> select * from metadata_locks where OBJECT_NAME='test1' \\G
*************************** 1. row ***************************
OBJECT_TYPE: TABLE
OBJECT_SCHEMA: etest
OBJECT_NAME: test1
COLUMN_NAME: NULL
OBJECT_INSTANCE_BEGIN: 140400821752448
LOCK_TYPE: EXCLUSIVE
LOCK_DURATION: TRANSACTION
LOCK_STATUS: PENDING
SOURCE: mdl.cc:3924
OWNER_THREAD_ID: 5670
OWNER_EVENT_ID: 1
1 row in set (0.00 sec)