前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL metadata lock 的A来B去

MySQL metadata lock 的A来B去

作者头像
AustinDatabases
发布2019-09-18 16:51:29
7440
发布2019-09-18 16:51:29
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

A: metadata lock 元数据锁,这名词听说过吗

B: 嗯,不就是我做DDL 操作时候的数据库的锁吗?

A:诶,你这也太笼统?

B: 那你说是什么

A: 为了确保事务的可串行性,服务器必须不允许一个会话对另一个会话中未完成的显式或隐式启动的事务中使用的表执行数据定义语言(DDL)语句。服务器通过在事务中使用的表上获取元数据锁,并将这些锁的释放推迟到事务结束时,从而实现这一点。表上的元数据锁可以防止对表结构的更改。这种锁定方法意味着一个会话内的事务正在使用的表不能进行DDL 的操作,表上的元数据锁可以防止对表结构的更改。这种锁定方法意味着,一个会话内的事务正在使用的表不能在DDL语句中被其他会话使用,直到事务结束。”

B: 你罗里吧嗦那么多,不和我说的一个意思。

A: NO NO NO

B: 行了别废话了,不行你比划比划,你到底说的我哪里说的不对?

A: OK ,那我们就来做一个例子看看,我们在MYSQL 中打开两个操作窗口

其中一个进行事务操作,一个进行DDL 操作 ,然后我们看看metadata lock 的问题

窗口1

begin;

select * from error limit 1;

窗口2

alter table error add column info varchar(32);

然后我们就可以看到 metadata lock 锁了

select * from performance_schema.metadata_locks;

SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, LOCK_TYPE,

LOCK_STATUS, THREAD_ID, PROCESSLIST_ID, PROCESSLIST_INFO FROM performance_schema.metadata_locks INNER JOIN performance_schema.threads ON THREAD_ID = OWNER_THREAD_ID WHERE PROCESSLIST_ID <> CONNECTION_ID();

从图中我们可以看到一个metadata lock 锁是由 5 个锁组成的

1 对于当前要操作表的 shard_read lock

2 GLOBAL intention_exclusive

3 对于当前操作表的 intention_exclusive

4 对于要操作表的 exclusive

5 对于 metadata_locks 表本身的 shard_read

B: 你讲了这么多,有个屁用,不还是我刚才说的,有两个意思吗?

A:那我问你在操作 PT 工具的时候,PT-OSC 会不会遇到 metadata lock, 你在 truncate table 的时候,会不会遇到 metadata lock

B:额.......... 我做实验去了

B: 诶,我做你的这个实验怎么什么都看不到

A :嗯我估计你有以下条件没有达到

1 MYSQL 5.7 版本

2 打开 performance_schema 收集信息的设置

代码语言:javascript
复制
 UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME = 'global_instrumentation';
代码语言:javascript
复制
 UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME = 'wait/lock/metadata/sql/mdl';
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档