10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

27.12.13.3 metadata_locks表

MySQL使用元数据锁定来管理对数据库对象的并发访问,并确保数据一致性;看到第8.11.4节“元数据锁定”.元数据锁定不仅适用于表,还适用于模式、存储程序(过程、函数、触发器、计划事件)、表空间、使用GET_LOCK ()函数(见第12.15节,“锁定功能”中描述的锁定服务获取的锁第5.6.9.1节“锁定服务”

方法公开元数据锁信息metadata_locks表:

  • 已授予的锁(显示哪些会话拥有哪些当前元数据锁)。

  • 已请求但尚未授予的锁(显示哪些会话正在等待哪些元数据锁)。

  • 锁定已被死锁检测器杀死的请求。

  • 已超时并正在等待请求会话的锁请求被丢弃的锁请求。

这些信息使您能够理解会话之间的元数据锁依赖关系。您不仅可以看到会话正在等待哪个锁,还可以看到当前哪个会话持有该锁。

metadata_locks表为只读,不能更新。默认情况下,它是自动调整大小的;要配置表大小,请设置performance_schema_max_metadata_locks服务器启动时的系统变量。

元数据锁工具使用等待/锁定/ / sql / mdl元数据工具,默认启用。

要在服务器启动时控制元数据锁检测状态,请在您的my.cnf文件:

  • 启用:

    (mysqld) performance-schema-instrument = '等待/锁定/元数据/ sql / mdl = '
  • 禁用:

    (mysqld) performance-schema-instrument = '等待/锁定/元数据/ sql / mdl =了'

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

  • 启用:

    更新performance_schema。setup_instrumentsSET ENABLED = 'YES', TIMED = 'YES' WHERE NAME = 'wait/lock/metadata/sql/mdl';
  • 禁用:

    更新performance_schema。setup_instrumentsSET ENABLED = 'NO', TIMED = 'NO' WHERE NAME = 'wait/lock/metadata/sql/mdl';

性能架构维护metadata_locks表内容如下,使用LOCK_STATUS列,表示每个锁的状态:

  • 当请求并立即获得元数据锁时,状态为的行授予被插入。

  • 当请求元数据锁但没有立即获得时,状态为的行等待被插入。

  • 当授予先前请求的元数据锁时,其行状态更新为授予

  • 当元数据锁被释放时,它所在的行将被删除。

  • 当挂起的锁请求被死锁检测器取消以打破死锁时(ER_LOCK_DEADLOCK),它的行状态从等待受害者

  • 当挂起的锁请求超时时(ER_LOCK_WAIT_TIMEOUT),它的行状态从等待超时

  • 当被授予的锁或挂起的锁请求被杀死时,它的行状态将从更新授予等待杀了

  • 受害者超时,杀了状态值很简短,表示即将删除锁行。

  • PRE_ACQUIRE_NOTIFY而且POST_RELEASE_NOTIFY状态值很简短,表示元数据锁定子子系统在进入锁获取操作或离开锁释放操作时通知感兴趣的存储引擎。

metadata_locks表有这些列:

  • OBJECT_TYPE

    元数据锁子系统中使用的锁类型。取值为全球模式表格函数过程触发(目前未使用),事件提交用户级锁表空间,或锁定服务

    的值用户级锁表示通过获取的锁GET_LOCK ().的值锁定服务中描述的锁定服务获取的锁第5.6.9.1节“锁定服务”

  • OBJECT_SCHEMA

    包含对象的模式。

  • OBJECT_NAME

    仪器对象的名称。

  • OBJECT_INSTANCE_BEGIN

    被测量对象的内存中的地址。

  • LOCK_TYPE

    来自元数据锁子系统的锁类型。取值为INTENTION_EXCLUSIVE共享SHARED_HIGH_PRIOSHARED_READSHARED_WRITESHARED_UPGRADABLESHARED_NO_WRITESHARED_NO_READ_WRITE,或独家

  • LOCK_DURATION

    来自元数据锁定子系统的锁定时长。取值为声明事务,或显式的.的声明而且事务值表示分别在语句或事务端隐式释放的锁。的显式的值表示在语句或事务结束时仍然存在的锁,并通过显式操作释放,例如通过获取的全局锁用读锁刷新表

  • LOCK_STATUS

    来自元数据锁子系统的锁状态。取值为等待授予受害者超时杀了PRE_ACQUIRE_NOTIFY,或POST_RELEASE_NOTIFY.如前所述,性能模式分配这些值。

  • 包含产生事件的检测代码的源文件的名称,以及发生检测的文件中的行号。这使您能够检查源代码,以确定具体涉及哪些代码。

  • OWNER_THREAD_ID

    请求元数据锁的线程。

  • OWNER_EVENT_ID

    请求元数据锁的事件。

metadata_locks表有以下索引:

  • 主键(OBJECT_INSTANCE_BEGIN

  • 指数(OBJECT_TYPEOBJECT_SCHEMAOBJECT_NAME

  • 指数(OWNER_THREAD_IDOWNER_EVENT_ID

截断表是不允许的metadata_locks表格