锁--09---MVCC概述

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


MVCC概述

MySQL锁–05—MVCC-多版本并发控制

在这里插入图片描述

1. 什么是MVCC

MVCC,全称Multi-Version Concurrency Control,即多版本并发控制

在这里插入图片描述

2. 快照读与当前读

在这里插入图片描述

2.1 快照读

  • 实现方式: mvcc — 基于版本的控制协议

快照读可能读到的并不一定是数据的最新版本,而有可能是之前的历史版本

普通的 select… 查询都是快照读

在这里插入图片描述

2.2 当前读

  • 实现方式: 临键锁(Next-Key Locks),也就是结合gap锁与行锁,

读取的数据的最新版本,并且在读的时候不允许其它事物修改当前记录

在这里插入图片描述

3.mysql 解决幻读问题

在这里插入图片描述
在这里插入图片描述

MVCC实现原理

MVCC 的实现主要依赖于:隐藏字段、Undo Log、Read View

1. 隐藏字段

在这里插入图片描述
在这里插入图片描述

2. undo log

undolog被称之为回滚日志,表示在进行insert,delete,update操作的时候产生的方便回滚的日志
  • 当进行insert操作的时候,产生的undolog只在事务回滚的时候需要,并且在事务提交之后可以被立刻丢弃
  • 当进行update和delete操作的时候,产生的undolog不仅仅在事务回滚的时候需要,在快照读的时候也需要,所以不能随便删除,只有在快照读或事务回滚不涉及该日志时,对应的日志才会被purge线程统一清除
事务–04—MySQL事务日志----Undo日志

在这里插入图片描述

3. undo log 举例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版本链

  • 不同事务或者相同事务的对同一记录的修改,会导致该记录的undolog生成一条记录版本线性表,即链表.版本链
  • undolog的链首就是最新的旧记录,链尾就是最早的旧记录。

ReadView

1. 什么是ReadView

Read View 是事务进行快照读操作的时候产生的读视图

在这里插入图片描述

ReadView 是记录当前活跃事务(启动,还未提交)的视图

2. 设计思路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. ReadView的规则

在这里插入图片描述
在这里插入图片描述

4. MVCC整体操作流程

在这里插入图片描述
在这里插入图片描述

5. 不同隔离级别下 创建Read View

在RC隔离级别下,是每个快照读都会生成并获取最新的Read View,

在这里插入图片描述

而在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View,之后的快照读获取的都是同一个Read View.

在这里插入图片描述

MVCC 小结

1.核心原理

MVCC 的实现主要依赖于:隐藏字段、Undo Log、Read View

在这里插入图片描述

2.MVCC解决的问题

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值