0
点赞
收藏
分享

微信扫一扫

Ep_MySQL基础-多版本并发MVCC部分


Ep_MySQL基础-多版本并发MVCC部分_数据库

 

含义

Multiversion concurrency control,多版本并发控制,

提供并发访问数据库时,对事务内读取的数据做处理,用来避免写操作堵塞读操作的并发问题。

实现:


InnoDB的MVCC实现,是通过保存数据在某个时间点的快照来实现的。   一个事务,   不管其执行多长时间,其内部看到的数据是一致的。也就是事务在执行的过程中不会相互影响。     InnoDB的MVCC,为每一行数据增加了三个隐藏列用于实现MVCC。


MVCC只在READ COMMITED 和 REPEATABLE READ 两个隔离级别下工作。

MVCC实现的要记住的名词:

Ep_MySQL基础-多版本并发MVCC部分_MVCC_02

 

Ep_MySQL基础-多版本并发MVCC部分_数据库_03

Ep_MySQL基础-多版本并发MVCC部分_张无忌的面试宝典_04

 

Ep_MySQL基础-多版本并发MVCC部分_张无忌的面试宝典_05

 

 

MVCC的实现原理

实战来讲通,请看视频哈

读已提交版本

    每次select 都会生成快照一次)

Ep_MySQL基础-多版本并发MVCC部分_MVCC_06

 

Ep_MySQL基础-多版本并发MVCC部分_张无忌的面试宝典_07

 

找最大事务id,看是否提交,没提交回滚, 提交直接找到结果

可重复读版本

    (一次事务(事务4)只会生成快照一次)

Ep_MySQL基础-多版本并发MVCC部分_MVCC_08

 

Ep_MySQL基础-多版本并发MVCC部分_MVCC_09

 

下面进行整个MVCC的概括:

MVCC 实现对数据库的并发访问

通过保存数据在某个时间点的快照来实现的。

一个事务,不管其执行多长时间,其内部看到的数据是一致的。

MVCC只在READ COMMITED 和 REPEATABLE READ 两个隔离级别下工作。

他的核心条件:


表的隐藏列: 1事务id 2 回滚指针(指向上一个版本数据) 3隐藏的rowId 读视图里面的: 1 未提交事务版本号的集合 2最大事务版本号 3创建当前读视图的时间 各种日志: 比如undo log redo log binlog 以及从库里面的中继日志


我就拿读已提交和可重复读情况举例:

读已提交的情况举例,

   你每次查都会生成一次快照, 从最大事务id开始看下他提交了吗,提交了就用的数据,否则根据回滚指针回滚到他的上一个版本,知道当前事务id提交了,就返回他的数据

可重复读情况举例:


一次事务只会生成快照一次, 从最大事务id开始看下他提交了吗,提交了就用的数据,否则根据回滚指针回滚到他的上一个版本,知道当前事务id提交了,就返回他的数据



面试宝典

Ep_MySQL基础-多版本并发MVCC部分_mysql_10

 很多人不知道面试问什么,或者其他的XXGuide,那里边的太多没用的,也没有源码解析,都靠自己悟, 不懂得还是不懂,没人讲解, 所以面试宝典来了,阿里P7亲自录制 


目录:

Ep_MySQL基础-多版本并发MVCC部分_mysql面试_11

每一个专题都是 基础+面试题

--基础阶段剖析了很多源码比如Spring的 LongAdder ConcurrentHashMap源码 ThreadLocal源码 AQS SpringBoot等等。。。

Ep_MySQL基础-多版本并发MVCC部分_mysql面试_12


 

举报

相关推荐

0 条评论