MySQL MDL锁

show processlist 

1、作用

MySQL5.5 引入,用于解决或者保证DDL操作与DML操作之间的一致性

所以MDL锁是在Server级别的锁

2、对象

可以是表锁,也可以是全局锁、库级别的锁、表空间级别的锁

某些类型的MDL锁会从上往下一层层进行加锁。比如LOCK TABLE … WRITE这样的SQL语句,其首先会对GLOBAL级别加INTENTION_EXCLUSIVE锁,再对SCHEMA级别加INTENTION_EXCLUSIVE锁,最后对TABLE级别加SHARED_NO_READ_WRITE锁。

3、锁模式

锁模式    简称    对应SQL    备注
MDL_INTENTION_EXCLUSIVE    IX    GLOBAL对象、SCHEMA对象操作会加此锁    
意向X锁,只用于scope 锁
MDL_SHARED    S    FLUSH TABLES with READ LOCK,    
只能读metadata,当能读写数据,如检查表是否存在时用这个锁
MDL_SHARED_WRITE_LOW_PRIO    SWL    仅对MyISAM存储引擎有效    

MDL_SHARED_HIGH_PRIO    SH    仅对MyISAM存储引擎有效    
高优先级S锁,可以抢占X锁,只能读metadata,不能读写数据,用于填充INFORMATION_SCHEMA,或者show create table时
MDL_SHARED_READ    SR    SELECT查询,DML共享    
可以读表数据,select语句,lock table xxx read 都用这个
MDL_SHARED_WRITE    SW    DML独占锁    
可以更新表数据,insert,update,delete,lock table xxx write, select for update
MDL_SHARED_UPGRADABLE    SU    ALTER TABLE    
可升级锁,可以升级为SNW或者X锁,ALTER TABLE第一阶段会用到
MDL_SHARED_READ_ONLY    SRO    LOCK xxx READ    
SRO阻塞SW,SNRW,X

MDL_SHARED_NO_WRITE    SNW    
可升级锁,其它线程能读metadata,数据可读不能读,持锁者可以读写,可以升级成X锁,ALTER TABLE的第一阶段

MDL_SHARED_NO_READ_WRITE    SNRW    lock tables write    
可升级锁,其它线程能读metadata,数据不能读写,持锁者可以读写,可以升级成X锁,LOCK TABLES xxx WRITE
MDL_EXCLUSIVE    X    ALTER TABLE xxx PARTITION BY …    
排它锁,禁止其它线程的所有请求,CREATE/DROP/RENAME TABLE
4、LOCK_DURATION

MDL_STATEMENT    
语句范围的,语句结束自动释放
MDL_TRANSACTION    
事务范围的,事务结束时自动释放
MDL_EXPLICIT    
显式锁,由lock tables xxx read 这种获取,需要通过unlock tables释放
5、LOCK_STATUS

GRANTED    当请求并立即获得元数据锁定
PENDING    当请求元数据锁定而不立即获取
VICTIM    当死锁检测器取消挂起的锁定请求以打破死锁时,其行状态将从更新 PENDING 为 VICTIM 。
KILLED    当准予的锁定或挂起的锁请求被杀
PRE_ACQUIRE_NOTIFY,POST_RELEASE_NOTIFY    表示该元数据锁定subsubsystem的通知感兴趣的存储引擎,而进入锁定获取操作或离开锁释放操作。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值