锁--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概述的主要内容,如果未能解决你的问题,请参考以下文章