InnoDB存储引擎中的锁

        我们知道,mysql常用的存储引擎是MyISAM和InnoDB,对于MyISAM引擎来说,只支持表锁,并发情况下的读一般都没问题,但对并发插入的性能就要差一些了。InnoDB引擎则支持行锁机制,在锁的粒度上可以更细,从而进一步提高并发插入的性能。

一,共享锁和排他锁的概念     

  InnoDB存储引擎实现了如下两种标准的行级锁:

       1,共享锁 (S Lock), 允许事务读一行数据;

       2,排他锁 (X Lock), 允许事务删除或者变更一行数据。

       当一个事务已经获取了某行r的共享锁,那么另外的事务也可以立即获取该行r的共享锁而无需等之前的事务释放共享锁,因为读取操作并没有改变行r的数据,因此可以并行获取,此时称为锁兼容,若如果这时候有另外一个事务想获取行r的排他锁,则它必须等待之前事务释放行r上的共享锁,此时称为为锁不兼容。

      下面总结一下共享锁和排他锁的兼容情况:   

 XS
X冲突冲突
S冲突兼容
      

      结论:从上面的表格可以看出,若一个事务已经获取了某行r的排他锁,则其他事务均无法获取该行r的排他锁和共享锁;若一个事务已经获取了某行r的共享锁,则其他事务无法获取行r的排他锁,但可以立即获取对应行r的共享锁。


二,如何查看锁请求的信息

      在InnoDb Plugin之前,我们只能通过如下命令查看:

      mysql > show full processlist;

      myslq > show engine innodb status;

     

      在新的版本InnoDb Plugin后,我们可以通过查看数据字典information_schema下的三个表来获取事务,锁,锁等待的情况。对应的三张表是分别是:

      1,information_schema.INNODB_TRX

      2,information_schema.INNODB_LOCKS

      3,information_schema.INNODB_WAITS

      下面我们通过例子来分析这三张表。

        todo,待续中...


     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值