我的编程空间,编程开发者的网络收藏夹
学习永远不晚

什么是MySQL元数据锁

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

什么是MySQL元数据锁

这篇文章主要介绍“什么是MySQL元数据锁”,在日常操作中,相信很多人在什么是MySQL元数据锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是MySQL元数据锁”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、什么是元数据锁

MDL 全称为 metadata lock,即元数据锁,一般也可称为字典锁。MDL 的主要作用是为了管理数据库对象的并发访问和确保元数据一致性。元数据锁适用对象包含:table、schema、procedures, functions, triggers, scheduled events、tablespaces 。

2、加锁规则

获取规则:

  • 语句逐个( one by one )获取元数据锁,不是同时获取,并在获取过程中执行死锁检测。

  • DML 语句获取锁按照语句中 table 出现的顺序来获取锁。

  • DDL 语句、LOCK TABLES 和其他类似语句按名称顺序获取锁,对于隐式使用的表(例如外键关系中也必须锁定的表)可能会以不同的顺序获取锁。

  • DDL 的写锁请求优先级高于 DML

3、模拟加锁规则

两个相同表结构的表 t 和 t_new 开始。三个线程来操作这些表:

场景一

线程 1:

LOCK TABLE t WRITE, t_new WRITE;

该语句按表名顺序在 t 和 t_new 上获取写锁

线程 2:

INSERT INTO t VALUES(1);

该语句处于也需要获取表 t 上的 MDL 所以处于等待状态

线程 3:

RENAME TABLE t TO t_old, t_new TO t;

该语句需要按表名顺序在 t 、t_new、t_old 上获取互斥锁,所以也处于等待状态

线程 1:

UNLOCK TABLES;

该语句释放对 t 和 t_new 的写锁定。线程 3 对 t 加写锁的优先级高于 线程 2 ,因此线程 3 在 t 上优先获得互斥锁,然后依次在 t_new、t_old 上获取互斥锁,执行重命名后释放其锁定。线程 2 获得 t 上的写锁,执行插入操作,然后释放其锁定。rename 操作在 insert 之前执行。

场景二

两个具有相同表结构的表 t 和 new_t ,同样是三个线程来操作这些表

线程 1:

LOCK TABLE t WRITE, new_t WRITE;

该语句按表名顺序在 new_t 和 t 上获取写锁

线程 2:

INSERT INTO t VALUES(1);

该语句处于也需要获取表 t 上的 MDL 所以处于等待状态

线程 3:

RENAME TABLE t TO old_t, new_t TO t;

该语句需要按表名顺序在 new_t 、old_t、t 上获取互斥锁,所以也处于等待状态

该语句释放对 t 和 new_t 的写锁定。对于 t 首先发起锁请求的是线程 2 ,因此线程 2 优先获得了 t 上的元数据写锁,执行完插入操作,然后释放该锁。线程 3 首先获取的是 new_t 、old_t 的互斥锁,最后才会请求 t 上的互斥锁,所以线程 3 在线程 2 执行完毕之前都是处于等待状态的。rename 操作在 insert 操作之后。

4、 如何监控元数据锁

performance_schema.metadata_locks 表中记录了元数据锁相关的信息,开启方式如下:在线开启 metadata_locks,操作如下:

--UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME ='global_instrumentation'; --此值默认已开启了,可检查确认。  UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME ='wait/lock/metadata/sql/mdl';

若可停库维护,则在 my.cnf 中添加如下:

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

5、如何优化元数据锁

MDL 锁一旦发生会对业务造成极大影响,因为后续所有对该表的访问都会被阻塞,造成连接积压。我们日常要尽量避免 MDL 锁的发生,下面给出几点优化建议可供参考:

  • 开启 metadata_locks 表记录 MDL 锁。

  • 设置参数 lock_wait_timeout 为较小值,使被阻塞端主动停止。

  • 规范使用事务,及时提交事务,避免使用大事务。

  • 增强监控告警,及时发现 MDL 锁。

  • DDL 操作及备份操作放在业务低峰期执行。 

到此,关于“什么是MySQL元数据锁”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

什么是MySQL元数据锁

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql中元数据是什么

mysql中元数据是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、元数据概念元(meta),一般被我们翻译成“关于……的……”。元数据(meta data)——“dat
2023-06-14

什么是元数据?

元数据是指描述和解释数据的信息,有助于理解和管理数据。根据类型不同,元数据可描述数据内容、结构、质量和用途。元数据用途广泛,包括数据组织、理解、管理、共享和发现。都柏林核心、MODS等标准确保元数据的兼容性。在创建和管理元数据时,需要考虑元数据创建、质量、互操作性、安全和治理等方面的挑战。
什么是元数据?
2024-04-02

什么是数据元

数据元,即数据单元,是构成数据库中数据对象的最小单位,是表达和描述事物属性的数据项,通常可以理解为一个字段或者一个属性。例如,在一个用户信息表中,“姓名”、“年龄”、“性别”等都可以被看作是数据元。理解数据元的含义及其作用,对于数据管理和数据分析至关重要。
什么是数据元
2023-10-29

WCF元数据是什么

这篇文章主要讲解了“WCF元数据是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF元数据是什么”吧!WCF经过长时间的发展,使用它的人越来越多,它的功能也随之的强大,就我的经验来处理
2023-06-17

详细分析mysql MDL元数据锁

前言: 当你在MySQL中执行一条SQL时,语句并没有在你预期的时间内执行完成,这时候我们通常会登陆到MySQL数据库上查看是不是出了什么问题,通常会使用的一个命令就是 show processlist,看看有哪些session,这些ses
2022-05-23

什么是元数据?元数据库又怎么理解?

  什么是元数据?元数据库又是什么?元数据是信息系统项目管理师的重要知识点,元数据是“描述数据的数据”,而元数据库一个是指用来描述其他表信息的数据表。  元数据是信息系统项目管理师的重要知识点,很多学员都不太清楚什么是元数据、元数据库又是什么,为此,编程学习网小编将元数据和元数据库知识点的辨析内容整
什么是元数据?元数据库又怎么理解?
2024-04-19

什么是数据死锁,死锁的必要条件是什么

一丶什么是数据死锁?死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程.二丶死锁的必要条件是什么?互斥条件:指进程对所分
什么是数据死锁,死锁的必要条件是什么
2020-02-19

Dubbo元数据中心是什么

这篇文章主要介绍“Dubbo元数据中心是什么”,在日常操作中,相信很多人在Dubbo元数据中心是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Dubbo元数据中心是什么”的疑惑有所帮助!接下来,请跟着小编
2023-06-04

C#单元格数据是什么

本篇内容介绍了“C#单元格数据是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!最近在做一个项目,其中有一个技术性的难题:“提取Word指
2023-06-18

WCF服务元数据是什么

这篇文章主要讲解了“WCF服务元数据是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF服务元数据是什么”吧!WCF服务元数据的基本概念WCF服务元数据究竟是什么?它的作用是什么?为什
2023-06-17

编程热搜

目录