InnoDB并发控制技术之MVCC

MVCC介绍

  1. 介绍: MVCC (Multiversion Concurrency Control),是一种基于数据多版本的并发控制技术,JDK的CopyOnWriteArrayList使用了此原理;
  2. 作用: 并发事务中,读不再阻塞写,提升数据库的并发性;

MVCC实现原理

核心思想: 每个写请求生成一个新版本(事务ID标识)的数据,写过程中并发的读请求依然读取旧版本的数据(数据快照/ReadView),大致如下图所示:

  • RR隔离级别,整个事务期间,使用相同版本的数据快照/ReadView;

在这里插入图片描述

  • RC隔离级别,每次查询使用最新版本的已提交数据快照/ReadView;
    在这里插入图片描述

数据快照/ReadView

  InnoDB引擎中,创建数据快照/ReadView是非常轻量级的。因为数据快照/ReadView只是记录了下生成快照时刻的事务信息:已提交的事务、未提交的事务和未开始的事务,并没有进行真正的数据复制。InnoDB读取数据快照的数据时,只需要按照一定的规则从undo.log中查找生成快照时当前事务可见的最新数据。从最新版本数据开始往前查找比对,过程如下:

  1. 如果当前数据的事务ID < 低水位,说明在ReadView中属于已提交事务,则数据可见;
  2. 如果当前数据的事务ID > 高水位,说明在ReadView中属于未开始事务,则数据不可见;
  3. 如果当前数据的事务ID在高低水位区间内,则要分情况判断:
    a) 如果事务ID在未提交事务集合内,说明在ReadView中属于未提交事务,数据不可见;
    b) 如果事务ID不在未提交事务集合内,说明在ReadView中属于已提交事务,数据可见;

在这里插入图片描述

参考:

  1. 浅谈MySQL并发控制:隔离级别、锁与MVCC
  2. MVCC底层原理讲解视频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值