MVCC版本并发控制

什么是MVCC

MVCC简称多版本并发控制,旨在为了解决并发事务的问题,它主要是依据undolog,readview,和三个隐藏字段控制

其实在表的每个记录,都存在三个隐式的字段,一般我们正常查询不到,分别是隐式主键,当我们创建一个表没有给他设置主键的时候就会使用隐式主键,第二个是回滚指针,我们知道undolog会记录我们事务提交前的版本,回滚指针就是指向这个旧版本的依据。第三个就是事务id,指的是最近的一次修改该记录的事务id,事务的id是自增的。

快照读:为了理解,你可以把它当作是一个记录副本,在不同事务隔离级别下快照读的方式是不一样的,在RC隔离级别下,事务中的每一次select都会创建一个快照,记住是每一次,而在RR隔离级别下,事务中的第一次select会创建快照,其他select都是读取这个快照,主要是为了解决不可重复读的问题,上篇文章说过。

当前读:读取的是当前数据库最新的版本。

快照读到底是怎么读的,怎么确定读那个版本?

这就要看readview,每一次快照读都会生成一个readview,他有一下几个属性 :                               m_ids当前活跃的事务,min_trx_id当前最小活跃事务的id,max_try_id当前最大活跃事务id+1,create_try_id,reedview创建者的事务id。                                                                                 我们知道undolog会记录旧版本记录形成一个版本链,根据这个版本链我们可以一层一层遍历看哪个版本符合要求。

readview读取规则:

1.当前记录的事务id如果等于create_try_id,是不是说明该记录的版本是当前记录事务更改的,我自己的事务是不是能读到我自己所修改的内容。

2.当前记录的事务id小于min_try_id,我比最小的活跃事务id还小,是不是说明当前事务已经提交的呀。

3.当前记录事务id大于max_try_id, 说明当前事务是在readview生成之后开启的

4.当前记录事务id大于等于min_try_id并且小于等于max_try_id并且不在m_ids集合之间 说明当前事务已经提交了。

通过这些读规则我们就可以实现多版本并发控制的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值