innodb元数据锁解释

什么是元数据锁?

其实在mysql 5.5.3开始之后的版本,针对innodb表,任何已经开始的事务将一直持有元数据锁,一直到事务提交,另外使用alter对表结构进行修改的时候,也会持有元数据锁,直到alter语句结束。


1、创建一张innodb引擎的测试表


插入2行数据

mysql> insert into db1 values(1,'小明'),(2,'小刚');

Query OK, 2 rows affected (0.00 sec)

Records: 2  Duplicates: 0  Warnings: 0


2、开启A事务,进行对表查询



3、开启B事务,对表结构进行修改


可以看到alter语句被阻塞


4、执行show processlist;看到当前线程



小结:

A事务中的select操作个db1表添加了元数据读锁,在B事务中alter table操作对db1表添加了元数据写锁,只有当A事务提交或者回滚,才会释放元数据读锁,B事务的alter操作才可以继续执行。


之前看到另外博主遇到MySQL版本为5.5,表是myisam引擎,做ddl时出现了Waiting for table metadata lock,myisam是非事务引擎,这个典型是一个问题,值得深思。

http://blog.csdn.net/cug_jiang126com/article/details/51698236

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值