关于mysql元数据锁(mdl)的认识

文章介绍了MySQL中的MDL锁机制,包括元数据共享锁和排它锁的类型,并通过实例展示了如何通过DML和DDL操作获取不同类型的MDL锁。同时指出在高并发环境下,字段变更时需要考虑锁冲突问题。
  1. mdl介绍

首先,建议大家看官网,我使用的是mysql5.7.26的版本,结果一开始查询meta_locks始终是空的,最后发现是需要在mysql配置中添加如下配置:

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

才能生效,网上一堆文章,并不详细,具体看官网。

附上地址:

MySQL :: MySQL 5.7 Reference Manual :: 25.12.12.1 The metadata_locks Table

  1. mdl两类:

  1. 元数据共享锁:

  1. 共享读锁(SHARED_READ)

  1. 共享写锁(SHARED_WRITE)

  1. 元数据排它锁(EXCLUSIVE)

  1. mdl使用

很简单:准备一张account表,里面两个字段,一个id,一个name,innodb类型,然后插入几条数据,然后启动三个会话窗口,第一个窗口执行select * from performance_schema.metadata_locks\G;来查询有多少mdl锁,第二个窗口用来得到共享锁(使用begin事务,然后里面使用dql和dml语句即可得到mdl共享读锁和mdl共享写锁),第三个窗口用来得到mdl排它锁(使用alter语句即可得到排它锁)。然后即可观察mdl锁的互斥情况。

  1. mdl总结

A、我们从表中第一次看到读锁和写锁不一定是互斥的,我们看到mdl的共享读锁和mdl共享写锁就不是互斥的,这是我目前看到的唯一一个读锁和写锁不互斥的案例。

B、DML是数据操纵语言(对数据的增删改),DDL:数据描述语言(对表结构的管理),DQL(select语句)

C、所以对于线上的高并发的表去进行字段的变更的时候就需要考虑怎么样避免产生锁冲突的问题(否则一定会产生长时间的锁冲突,从而更改字段失败),这个是需要研究的,回头再搞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值