面试官:说一下MVCC吧

举报
知识浅谈 发表于 2022/08/17 09:13:20 2022/08/17
【摘要】 面试官:说一下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,快照读就会生成两个不同的快照。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。