最近在碰到和Mysql事务、锁、隔离级别等相关的知识点,这里作一个汇总,主要是分析mysql在有共享锁,排他锁的情形下,是如何保证其高并发性能(主要利用了存储引擎的MVCC多版本并发控制),下面列出作具体说明
参考链接:一致性非锁定读与一致性锁定读(易于理解);MYSQL一致性非锁定读和锁定读;理解 MySQL 一致性非锁定读原理;漫谈MySql中的事务(非常易懂)
另外,还有一个问题,就是关于事务隔离级别是怎么解决对应问题的。
如RC如何解决不可重复读问题:
利用的是快照的一致性非锁定读(快照是MVCC协议一种常见的实现方式,MVCC的最大好处:读不加锁,读写不冲突)。注意:快照技术本身只做到了读一致,避免了读异常的发生,却没有对写进行限制
从MVCC协议来区分不可重复读与幻读(说明不可重复读和幻读的区别)
(这篇文章对幻读的解释我是比较认可的,和我之前写的那篇文章的观点一致(文章地址:针对mysql的RR级别的幻读问题的分析与理解),就是不可重复读主要是update,delete问题,幻读说的是insert)
具体解释:
幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。
更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。
最后一篇关于MVCC的说明,也是知乎上提到的文章(作为科普了解知道吧,文章有点长):MySQL InnoDB MVCC 机制的原理及实现