面试官:说一下MVCC吧

简介: 面试官:说一下MVCC吧
🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云星级博主
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈
🔥 联系方式vx:zsqtcc
🤞面试官偷偷告诉我:如何优化提升接口的性能🤞
正菜来了⛳⛳⛳

心里一万个我说你个der,面个试,非得让我造火箭,迫于无奈还是说吧。

MVCC:多版本控制协议

因为我们基于事务对数据库操作的时候不同的事务操作,会影响数据的变化,所以有一个undolog文件用于记录每个事务修改的数据信息记录,每个记录后边会加上对应的修改这个信息的事务id即trxid和指向上一个数据版本的point。

多版本控制协议是针对事务的隔离级别RC(读已提交)和RR(可重复读)来进行操作的。

对于快照读来说,每哥事务读取数据的时候会生成一个快照,快照中含有当前事务id和活动事务列表(就是没有提交的事务),以及最小活动事务id和最大活动事务id+1。

当一个事务select进行查询的时候,会生成一个快照,然后根据快照中的信息对ubdolog版本链中数据进行遍历,知道找到满足快照中条件的数据。

条件:版本链中当前行的事务id==快照中事务id或者小于快照中最小活动的id返回当前版本链中当前行的数据,若是当前行中的事务id大于等于快照中最大的活动事务id直接遍历下一行数据,当前行记录的事务id如果大于最小活动事务id小于最大活动事务id,就去活动id的数组中查询是不是在数组中,如果不在的话就直接返回当前行的数据,如果在的话遍历下一行以此类推。

RC隔离级别下:一个事务每一次快照读都会产生一个新的快照,所以不可重复读。

RR隔离级别下:一个事务的多次快照都都是使用的第一次度的时候的快照,所以可以借解决重复读,因为连续多次快照读都会重用一个快照,所以其他的事务并不会影响到RR的事务,所以就解决了幻读的问题。

值得主义的一个问题是如果两个快照都之间插入了一个当前读,就是这种 select for update,快照读就会生成两个不同的快照。

相关文章
|
4月前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
47 2
|
4月前
|
关系型数据库 MySQL
面试题MySQL问题之Read uncommitted隔离级别不适用MVCC如何解决
面试题MySQL问题之Read uncommitted隔离级别不适用MVCC如何解决
45 1
|
6月前
|
消息中间件 Java 关系型数据库
面试官:说说MVCC的执行原理?
面试官:说说MVCC的执行原理?
124 1
面试官:说说MVCC的执行原理?
|
存储 关系型数据库 MySQL
【MySQL面试】说说MVCC
【MySQL面试】说说MVCC
267 0
|
存储 关系型数据库 MySQL
MySQL面试精选:MVCC你还不懂就看这篇,不懂你来找我
MySQL面试精选:MVCC你还不懂就看这篇,不懂你来找我
|
SQL 存储 关系型数据库
面试突击:MVCC 和间隙锁有什么区别?
MVCC 和间隙锁是两种完全不同的机制,但它们的目的都是相同的,都是用来保证数据库并发访问的,我们先来看二者的定义。
176 0
|
算法 关系型数据库 MySQL
一个 MVCC 和面试官大战30回合(下)
一个 MVCC 和面试官大战30回合(下)
一个 MVCC 和面试官大战30回合(下)
|
存储 SQL 关系型数据库
一个 MVCC 和面试官大战30回合(上)
一个 MVCC 和面试官大战30回合(上)
一个 MVCC 和面试官大战30回合(上)
|
存储 关系型数据库 MySQL
面试官:谈谈你对Mysql的MVCC的理解?
面试官:谈谈你对Mysql的MVCC的理解?
面试官:谈谈你对Mysql的MVCC的理解?
|
3月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。