MVCC简述

定义

MVCC(multi-version concurrent control)是指多版本并发控制,是一种并发控制方法,在数据库管理系统中,实现对数据库的并发访问。

作用

Mysql的InnoDB引擎中实现的MVCC主要是为了提高数据库的并发性能,在不加锁的情况下处理读-写冲突。

原理

概述

MVCC的实现原理主要包括三个方面,分别是:
记录中的三个隐式字段,undo log,read view。

隐式字段

InnoDB中每行记录除了我们自定义的字段,还有三个隐式字段:TRX_ID,ROLL_PTR,ROW_ID。
TRX_ID:创建这条记录或者最后一次修改这条记录的事务id;
ROLL_PTR:回滚指针,指向这条记录的上一个版本;
ROW_ID:隐含的主键,如果数据库表没有主键,则用ROW_ID生成一个自增主键。

undo log

undo log是回滚日志,记录行数据的历史版本

read view

read view是事务进行快照读的时候产生的读视图,主要是用来做可见性判断的。
read view有三个主要字段:
trx_list:用来记录read view生成时刻系统正处于活跃状态的事务id;
up_limit_id:记录trx_list中的最小事务id;
low_limit_id:记录read view生成时系统尚未分配的下一个事务id,也就是当前最大事务id+1.
可见性规则如下:
如果TRX_ID等于创建read view事务的id,代表是本事务做出的修改,则当前事务能看到TRX_ID所在的记录;
如果TRX_ID < up_limit_id,代表TRX_ID所在的记录在Read View生成之前就提交了,则当前事务能看到TRX_ID所在的记录;
如果TRX_ID >= low_limit_id,代表TRX_ID所在的记录在Read View生成后才提交的,那么对于当前事务不可见;
如果up_limit_id <= TRX_ID < low_limit_id,再判断TRX_ID是否在活跃事务id中,如果在,则代表在Read View生成时刻,这个事务还是活跃状态,还没有commit,其修改的数据,当前事务不可见,如果不在,则说明这个事务在Read View生成之前就已经commit,那么其修改的结果对于当前事务是可见的。

InnoDB在RC、RR级别下生成read view的区别

RC级别下,一个事务中每次快照读都会生成一个read view;
RR级别下,一个事务只在第一次快照读的时候生成read view。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值