Mysql MVCC 多版本并发控制技术

MVCC 涉及的概念

  • MultiVersion Concurrency Control ,多版本并发控制技术。通过管理数据行的多个版本来解决并发安全问题的技术
  • 通过锁的方式可以解决 Mysql 的并发访问问题,但有锁就会有系统开销,而且完全无法读写并发,还可能产生死锁问题
  • MVCC 技术可以不加锁解决并发访问问题,降低系统开销,实现读写并发

快照读和当前读的概念

  • 快照读:读取到的是在 readview ( 后面有说明 ) 的基础上当前事务对该 readview 的修改,普通 select 属于快照读
select ...
  • 当前读:读取到的总是当前最新的数据,包含已提交的事务做出的更改,加锁的 select 、DML 语句属于当前读
select ... lock in share mode;

select ... for update;

insert ...; delete ...; update ...;

readview 的概念 :事务在进行某次快照读时同步生成的视图,也叫读视图。readview 中包含已提交的事务做出的更改

MVCC 的实现原理

  • 首先,每张表都有这样几个隐藏字段
    • DB_TRX_ID :创建或最后一次修改该记录的事务 id(每个事务都默认有一个 id )
    • DB_ROW_ID :隐藏的主键
    • DB_ROLL_PTR :回滚指针。当不同的事务修改同一条数据时,会使该记录的 undolog 形成一个链表,通过链表的头可以回滚为最新一次事务修改前的状态,后面依次是从新到旧的历史状态。回滚指针就指向这条链表。通过回滚指针可以找到指定事务开始前的数据状态。就可以通过这种方式还原某个 readview
  • MVCC 只在 RC 和 RR 两个隔离级别下工作。区别在于生成 readview 的时机不同,RC 在每一次快照读时都会生成,而 RR 只在第一次快照读时生成
  • RC 下使用 MVCC 解决了脏读问题;RR 下使用 MVCC 解决了不可重复读的问题,数据的可重复读其实就是 readview 的重复使用
  • RR 下的 MVCC 没有完全解决幻读问题,其他事务插入提交后本事务对新插入数据做出更改也会体现在 readview 中,即出现了幻读问题。幻读问题还是需要使用间隙锁来解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值