含义
Multiversion concurrency control,多版本并发控制,
提供并发访问数据库时,对事务内读取的数据做处理,用来避免写操作堵塞读操作的并发问题。
实现:
InnoDB的MVCC实现,是通过保存数据在某个时间点的快照来实现的。 一个事务, 不管其执行多长时间,其内部看到的数据是一致的。也就是事务在执行的过程中不会相互影响。 InnoDB的MVCC,为每一行数据增加了三个隐藏列用于实现MVCC。
MVCC只在READ COMMITED 和 REPEATABLE READ 两个隔离级别下工作。
MVCC实现的要记住的名词:
MVCC的实现原理
实战来讲通,请看视频哈
读已提交版本
每次select 都会生成快照一次)
找最大事务id,看是否提交,没提交回滚, 提交直接找到结果
可重复读版本
(一次事务(事务4)只会生成快照一次)
下面进行整个MVCC的概括:
MVCC 实现对数据库的并发访问
通过保存数据在某个时间点的快照来实现的。
一个事务,不管其执行多长时间,其内部看到的数据是一致的。
MVCC只在READ COMMITED 和 REPEATABLE READ 两个隔离级别下工作。
他的核心条件:
表的隐藏列: 1事务id 2 回滚指针(指向上一个版本数据) 3隐藏的rowId 读视图里面的: 1 未提交事务版本号的集合 2最大事务版本号 3创建当前读视图的时间 各种日志: 比如undo log redo log binlog 以及从库里面的中继日志
我就拿读已提交和可重复读情况举例:
读已提交的情况举例,
你每次查都会生成一次快照, 从最大事务id开始看下他提交了吗,提交了就用的数据,否则根据回滚指针回滚到他的上一个版本,知道当前事务id提交了,就返回他的数据
可重复读情况举例:
一次事务只会生成快照一次, 从最大事务id开始看下他提交了吗,提交了就用的数据,否则根据回滚指针回滚到他的上一个版本,知道当前事务id提交了,就返回他的数据
面试宝典
很多人不知道面试问什么,或者其他的XXGuide,那里边的太多没用的,也没有源码解析,都靠自己悟, 不懂得还是不懂,没人讲解, 所以面试宝典来了,阿里P7亲自录制
目录:
每一个专题都是 基础+面试题
--基础阶段剖析了很多源码比如Spring的 LongAdder ConcurrentHashMap源码 ThreadLocal源码 AQS SpringBoot等等。。。