关于InnoDB隔离级别实现原理的理解

本篇小欢子准备直接写一下对InnoDB隔离级别实现原理的当前理解,还望各位巨佬指正

RU

对于RU,InnoDB貌似没有做相关操作?并发能力最高,同时也无法避免并发带来的各种问题,如脏读,不可重复读等

S

对于S,目前理解就是“读写”、“写读”串行操作,要么先读后写,要么先写后读,并发能力最低

RC

对于RC,MVCC可以作用在该级别,每次快照读都会生成一个最新的ReadView(如代码所示)。ReadView当前理解其实就是一个对象或者说一个结构体,其里面的成员变量有生成这个ReadView的事务creator_trx_id,当前活跃事务的最大ID即max_trx_id,当前活跃事务的最小ID即min_trx_id,以及IDS,存放生成ReadView时的所有活跃事务的ID,在RC隔离级别下,快照读的流程大致是这样的
在这里插入图片描述

RR

对于RR,MVCC可以作用在该级别,如果只是单条快照读,那么流程与上图相同,但是如果是一个事务里面包含了多个快照读,那么流程与上图有些许差别。在RR级别下,若一个事务里面包含了多个快照读,那么ReadView只会在第一个快照读的时候创建,后面的快照读都以这个ReadView为依据,正因为这个方式,因此也避免了不可重复读这个问题

写在最后

MVCC真正的意义在于在保证并发相对安全的情况下,提高了并发能力,读(快照读)与写不冲突。但是写与写之间还是依靠锁机制来保证安全性。

import java.util.List;

/**
 * @description: 一致性视图
 * @create: 2021-07-30
 **/
public class ReadView {

    /**
     * 创建ReadView的事务ID
     */
    private int creator_trx_id;

    /**
     * 创建ReadView时活跃事务的最大ID,即最新的事务
     */
    private int max_trx_id;

    /**
     * 创建ReadView时活跃事务的最小ID,即最久的事务
     */
    private int min_trx_id;

    /**
     * 当前所有活跃事务ID的集合
     */
    private List<Integer> ids;
    
}

在这里插入图片描述

版本链示意图
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值