25.12.12.1 metadata_lockstable

MySQL 使用元数据锁定来 Management 对数据库对象的并发访问并确保数据一致性。参见第 8.11.4 节“元数据锁定”。元数据锁定不仅适用于 table,而且还适用于架构,存储的程序(过程,函数,触发器,调度的事件),table 空间,通过GET_LOCK()函数获取的用户锁(请参见第 12.14 节“锁定功能”)以及通过第 28.3.1 节“锁定服务”中描述的锁定服务获取的锁。 。

性能架构通过metadata_lockstable 公开元数据锁定信息:

此信息使您能够了解会话之间的元数据锁依赖性。您不仅可以看到会话正在 await 哪个锁,还可以看到当前拥有该锁的会话。

metadata_lockstable 是只读的,无法更新。默认情况下会自动调整大小。要配置 table 大小,请在服务器启动时设置performance_schema_max_metadata_locks系统变量。

元数据锁定工具使用wait/lock/metadata/sql/mdl工具,该工具默认情况下处于禁用状态。

要在服务器启动时控制元数据锁定检测状态,请在my.cnf文件中使用以下行:

[mysqld]
performance-schema-instrument='wait/lock/metadata/sql/mdl=ON'
[mysqld]
performance-schema-instrument='wait/lock/metadata/sql/mdl=OFF'

要在运行时控制元数据锁定检测状态,请更新setup_instrumentstable:

UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME = 'wait/lock/metadata/sql/mdl';
UPDATE performance_schema.setup_instruments
SET ENABLED = 'NO', TIMED = 'NO'
WHERE NAME = 'wait/lock/metadata/sql/mdl';

性能架构使用LOCK_STATUS列指示每个锁定的状态,从而按如下方式维护metadata_lockstable 的内容:

metadata_lockstable 具有以下列:

元数据锁定子系统中使用的锁定类型。该值是GLOBALSCHEMATABLEFUNCTIONPROCEDURETRIGGER(当前未使用),EVENTCOMMITUSER LEVEL LOCKTABLESPACELOCKING SERVICE之一。

USER LEVEL LOCKtable 示使用GET_LOCK()获取的锁。值LOCKING SERVICEtable 示使用第 28.3.1 节“锁定服务”中描述的锁定服务获取的锁定。

包含对象的架构。

被检测对象的名称。

被检测对象在内存中的地址。

来自元数据锁定子系统的锁定类型。该值是INTENTION_EXCLUSIVESHAREDSHARED_HIGH_PRIOSHARED_READSHARED_WRITESHARED_UPGRADABLESHARED_NO_WRITESHARED_NO_READ_WRITEEXCLUSIVE之一。

来自元数据锁定子系统的锁定持续时间。该值为STATEMENTTRANSACTIONEXPLICIT之一。 STATEMENTTRANSACTION值分别 table 示在语句或事务结束时隐式释放的锁。 EXPLICIT值 table 示可以在语句或事务结束后保留并由显式操作释放的锁,例如通过带读取锁的平桌子获取的全局锁。

来自元数据锁定子系统的锁定状态。该值是PENDINGGRANTEDVICTIMTIMEOUTKILLEDPRE_ACQUIRE_NOTIFYPOST_RELEASE_NOTIFY之一。性能架构如上所述分配这些值。

源文件的名称,其中包含产生事件的检测代码,以及发生检测的文件中的行号。这使您可以检查源以确定确切涉及的代码。

请求元数据锁定的线程。

请求元数据锁定的事件。

metadata_lockstable 不允许TRUNCATE TABLE

首页