锁--09---MVCC概述

Posted 高高for 循环

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了锁--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解决的问题

以上是关于锁--09---MVCC概述的主要内容,如果未能解决你的问题,请参考以下文章

分布式锁方案论证与实现

分布式锁方案论证与实现

Redis分布式锁

Java6中对synchronized的优化

SQL SERVER的锁机制——概述(锁的种类与范围)

SQL SERVER的锁机制