低成本理解MVCC

个人理解仅供参考,只讨论mysql的innoDB。

1、MVCC是什么

MVCC多版本并发控制,是mysql数据库的并发访问的解决方案(不同隔离级别,在不同程度上解决脏读、不可重复读、幻读等问题)。

2、MVCC怎么实现

通过数据库隐藏字段、undo log、read view机制实现的。

2.1 隐藏字段:DB_TRX_ID 事务id、DB_ROLL_PTR 回滚指针、 DB_ROW_ID 没有主键的时候默认行id 

2.2 undo log是什么:

undo log 是存的历史版本的行数据。(快速理解:隐藏字段把数据加宽,undo log相当于把数据加长。以时间顺序用指针把各个版本的数据连接好。)

2.3 read view机制在MVCC中起到什么作用

read view维护一个list<事务id>,用来记录当前哪些事务在执行,从而判断当前应该读取哪个版本的数据。

2.4 怎么解决不可重读读的问题

读已提交隔离级别每次查询都是不同的read view

可重复读隔离级别同一个事务同样的查询是同一个read view,从而解决不可重读读的问题。

3、MVCC解决了幻读问题吗

问题修正:应该是说MVCC的可重复读隔离级别有没有解决幻读问题,如果是序列化隔离级别肯定解决了。

通过间隙锁,解决了绝大部分幻读问题。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值