MySQL~MVCC多版本并发控制机制实现原理(read view、undo log、实现RC和RR)

MVCC是MySQL InnoDB存储引擎的一种并发控制机制,通过读写数据时读不同版本来避免加锁,提高并发性能。MVCC依赖于隐藏字段、Read View和Undo log。Read View用于判断数据可见性,Undo log存储老版本数据,更新操作会创建新的记录版本。MVCC仅在RC和RR隔离级别下工作,解决了脏读和不可重复读问题,但不防止丢失更新和幻读。
摘要由CSDN通过智能技术生成
  • 当前读和快照读

  • MVCC如何帮助锁实现RC和RR

MVCC


  • MVCC是一种多版本并发控制机制。

  • 大家都应该知道,使用锁和锁协议来实现相应的隔离级别来进行并发控制,味道虽好但因为锁会造成事务阻塞,导致并发性能会受到一定的影响。而多版本并发控制使得对同一行记录做读写的事务之间不用相互阻塞等待(写写还是要阻塞等待,因为事务对数据进行更新时会加上排他锁),提高了事务的并发能力,可以认为MVCC是一种 解决读写阻塞等待的行级锁 。

  • 也就是说在InnoDB中MVCC技术是和行锁机制一起使用的

  • 所谓多版本就是数据库表中每一行数据都可能存在多个版本,对数据库的任何修改的提交都不会直接覆盖之前的数据,而是产生一个新的版本与老版本共存,通过读写数据时读不同的版本来避免加锁阻塞。不同的存储引擎实现的MVCC多少有些差异,这里主要讨论下Mysql的默认存储引擎InnoDB对MVCC的实现原理。MVCC的实现主要依赖于数据库在每个表中添加的三个隐藏字段以及事务在查询时创建的快照(read view)和数据库的撤销日志(Undo log)。

  • MVCC的重要特性:

(1)MVCC只支持RC(读取已提交)和RR(可重复读)隔离级别。

(2)MVCC能帮助锁机制解决脏读、不可重复读问题,不能解决丢失更新问题和幻读问题。

(3)MVCC是用来解决读写操作之间的阻塞问题。使得在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值