华为云计算 云知识 什么是MDL锁视图
什么是MDL锁视图

社区版MySQL无法获取表MDL锁的详细信息,当客户遇到类似“Waiting for metadata lock”的问题而阻塞DML或DDL后,由于无法确定各session之间的关联,往往无从下手,复杂情况下,只能重启实例,从而增加解决问题的成本,对业务产生较大影响。而且在业务场景较复杂的情况下,一旦涉及对 数据库 元数据的互斥操作(如DDL、LOCK Table等),此类问题便会频繁发生,给一线运维和客户带来很大的困扰。

针对以上痛点,华为 云数据库MySQL 在充分调研内核的基础上,推出了MDL锁视图特性,可以清晰查看数据库各session持有和等待的元数据锁信息,方便现网运维进行问题定位,有效进行系统诊断,帮助客户更好地优化自身业务。

MDL锁视图以系统表的形式呈现,该表位于INFORMATION_SCHEMA,表名:METADATA_LOCK_INFO,表结构如下:

MDL锁视图    

MDL锁视图主要由7个字段组成,各字段详情为:

  • THREAD_ID:session的ID,即会话ID

  • LOCK_STATUS:MDL锁的状态,主要分为PENDING和GRANTED两种,分别表示session正在等待该MDL锁和session已获得该MDL锁

  • LOCK_MODE:加锁的模式,如MDL_SHARED、MDL_EXCLUSIVE、MDL_SHARED_READ、MDL_SHARED_WRITE等

  • LOCK_TYPE:MDL锁的类型,如Table metadata lock、Schema metadata lock、Global read lock、Tablespace lock等

  • LOCK_DURATION:MDL锁的范围,有三种取值:MDL_STATEMENT、MDL_TRANSACTION、MDL_EXPLICIT,分别表示语句级别、事务级别、global级别

  • TABLE_SCHEMA:数据库名,对于部分global级别的MDL锁,该值为空

  • TABLE_NAME:表名,对于部分global级别的MDL锁,该值为空


上一篇:经营一家网站使用CDN加速很重要 下一篇:什么是SHOW命令