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
mdl两类:
元数据共享锁:
共享读锁(SHARED_READ)
共享写锁(SHARED_WRITE)
元数据排它锁(EXCLUSIVE)
mdl使用
很简单:准备一张account表,里面两个字段,一个id,一个name,innodb类型,然后插入几条数据,然后启动三个会话窗口,第一个窗口执行select * from performance_schema.metadata_locks\G;来查询有多少mdl锁,第二个窗口用来得到共享锁(使用begin事务,然后里面使用dql和dml语句即可得到mdl共享读锁和mdl共享写锁),第三个窗口用来得到mdl排它锁(使用alter语句即可得到排它锁)。然后即可观察mdl锁的互斥情况。
mdl总结
A、我们从表中第一次看到读锁和写锁不一定是互斥的,我们看到mdl的共享读锁和mdl共享写锁就不是互斥的,这是我目前看到的唯一一个读锁和写锁不互斥的案例。
B、DML是数据操纵语言(对数据的增删改),DDL:数据描述语言(对表结构的管理),DQL(select语句)
C、所以对于线上的高并发的表去进行字段的变更的时候就需要考虑怎么样避免产生锁冲突的问题(否则一定会产生长时间的锁冲突,从而更改字段失败),这个是需要研究的,回头再搞。
文章介绍了MySQL中的MDL锁机制,包括元数据共享锁和排它锁的类型,并通过实例展示了如何通过DML和DDL操作获取不同类型的MDL锁。同时指出在高并发环境下,字段变更时需要考虑锁冲突问题。
的认识&spm=1001.2101.3001.5002&articleId=128982163&d=1&t=3&u=63478e0dc41248c8be67d9d6e3b0d203)
5033

被折叠的 条评论
为什么被折叠?



