MVCC底层原理

news2024/11/24 18:48:49

目录

    • 说明
    • MVCC的底层原理
      • 隐藏字段
      • undo log
      • Read View

说明

在被面试官问面试题的时候,首先它问了Mysql的事务的隔离级别有几种?默认是哪种?他们分别解决了什么问题?

我在一顿回答“巴巴巴巴。。。。”之后,它又继续问题了我:
1、读已提交是怎么实现的呢?
2、可重复读能不能解决幻读?如果可以是怎么解决的?什么情况下又会出现幻读?

我顿时不知道怎么回答,从这里,其实过后我才知道它已经把我从MySQL事务的隔离级别引到了MVCC那边,我需要去搞懂MVCC是什么以及它的底层原理。

MVCC的底层原理

MVCC的实现主要依赖于记录中的三个隐藏字段,undo log和Read View来实现。

隐藏字段

数据库表中除了我们自定义的字段外,还有数据库隐式定义的字段,如DB_TRX_ID,DB_ROLL_PTR和DB_ROW_ID等字段。

DB_TRX_ID:表示最近修改事务的id,用于记录创建这条记录或者是最后一次修改这条记录的事务的id。
DB_ROLL_PTR:回滚指针,指向这条记录的上一个版本,用于配合undo log。
DB_ROW_ID:隐藏的主键,如果数据表没有主键,那么innodb会自动生成一个6字节的row_id。

undo log

Undo Log被称为回滚日志,表示在进行inset、delete和update操作的时候阐释的方便回滚的日志。
当进行inser操作的时候,产生的undo log只在事务回滚的时候需要,并且在事务提交之后可以被丢弃。
当进行update和delete操作的时候,产生的undo log不仅仅在事务回滚的时候需要,在快照读的时候也需要,所以不能随便删除,只有在事务回滚或者快照读不涉及该日志是,对应的日志才会被purge线程统一清除。

为了便于理解,我们来举个小例子:假设有三个事务,事务1、2、3。
事务1向表中插入一条记录,如图
在这里插入图片描述
事务2修改该数据进行update。
事务2修改原本的记录之前,数据库会对该行加排它锁。
然后把原本的记录拷贝一份到undo log中,作为旧记录,既在undo log中有原本记录的拷贝副本。
当拷贝完成后,对数据进行update,并且修改隐藏字段最近修改的事务id,回滚指针指到undo log的拷贝副本中。
事务提交后,释放锁。
在这里插入图片描述

事务3也对该记录做了update。
事务3在堆原本的记录做update之前,数据库会对该行记录加排它锁。
然后把原本的记录拷贝一份到undo log中,作为旧记录,但是发现改行记录已经有undo log了,那么最小的旧数据作为链表的表头,插在该行记录undo log的最前面。
拷贝插入到表头之后,对数据进行update,并且修改隐藏字段最近修改事务的id,回滚指针指向刚刚拷贝的undo log的副本记录。
事务提交后,释放锁。

在这里插入图片描述

从这个图片可以看出,

不同事务或者相同事务的对同一记录的修改,会导致该记录的undo log生成一条记录版本链表,undo log的链首就是最新旧记录,链尾就是最早的旧记录。

Read View

为什么要有Read View的存在?
如果一条记录在undo log中有多个数据版本,并且这些又是由不同事务进行操作的,那么我们该如何选择?

Read View是事务进行快照读操作的时候产生的可读视图,在该事务执行读快照操作的那一刻,会生成一个数据系统当前的快照,记录并维护系统当前活跃事务的id,事务的id值是递增的。

Read View的最大作用是用来做可见性判断的,也就是说当某个事务在执行快照读的时候,对该记录创建一个Read View视图,把它当做条件去判断当前事务能够看到哪个版本的数据,有可能读取到的是最小的数据,也有可能读取的是当前行记录的undo log中某个版本的数据。

 
 
 
  
  
  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/426178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

追踪项目进展常用的衡量方法

作为项目管理活动,项目中的进度跟踪可以帮助你了解项目实时的完成状态。有了正确的方法、项目管理工具和指标,项目跟踪可以指导你的团队的行动,甚至在问题出现之前向你发出预警。 项目经理使用各种方法、工具和指标来跟踪进度。其中最常见的…

自然语言处理(Natural Language Processing,NLP)简要

自然语言处理(Natural Language Processing,NLP)简要一、发展状况二、发展优势三、发展瓶颈四、具体研究方向五、自然语言处理工具六、未来发展方向自然语言处理(Natural Language Processing,NLP)是计算机…

(原创)Flutter基础入门:各种常用容器类组件

前言 上篇博客主要讲了Flutter的Shape实现 Flutter基础入门:实现各种Shape效果 今天主要讲下Flutter中常用的一些容器组件 Flutter中组件数量很多,分类方式也各有不同 比如可以分为有态组价和无态组件 又可以分为容器组件、功能组件等 拿功能组件来说 有…

docker网络详解,自定义docker网络

文章目录一、初识docker网络1、docker0虚拟网桥2、docker网络常用基本命令3、docker网络可以解决的问题二、docker网络模式1、四种网络模式2、容器实例内默认网络IP生产规则3、bridge模式4、host模式5、none模式6、container模式五、自定义网络模式1、过时的docker link2、使用…

【英语】大学英语CET考试,词汇语法导学方法论笔记(50h+)

文章目录1、谭剑波-词汇直播课1-2(词汇学习3个关键)1.1 看不懂句子的原因(词汇的重要性)1.2 记不住单词的原因(死记硬背70%)1.3 理解单词的本质(词根词缀,26字母,联想辅助…

D3D11和D3D12共享资源

最近碰到个伪需求: 游戏串流。 游戏引擎用D3D12渲染, 再把游戏画面做视频编码, 通过网络发送到远端做解码显示。 第一反应就是走全GPU的流程, 不要用CPU把显存里的数据拷来拷去。 所以先获取渲染完的D3D12的frame buffer, 然后送给…

进程管理 - 银行家算法

文章目录1 概述2 银行家算法2.1 原理2.2 例题1 概述 #mermaid-svg-7QKAqjQpckpStO9Q {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7QKAqjQpckpStO9Q .error-icon{fill:#552222;}#mermaid-svg-7QKAqjQpckpStO9Q .e…

android framework-PackageManagerService(PKMS)包管理服务

一、概述 Android系统启动过程中,会启动一个包管理服务PackageManagerService(PKMS),这个服务主要负责扫描系统中指定目录,找出里面以apk结尾的文件,通过对这些文件进行解析,得到应用程序的所有信息并完成应用程序的安…

算法学习day59

算法学习day591.力扣503.下一个更大元素II1.1 题目描述1.2 分析1.3代码2.力扣42. 接雨水2.1 题目描述2.2 分析2.3 代码3.参考资料1.力扣503.下一个更大元素II 1.1 题目描述 题目描述: 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素&a…

【大数据Hadoop】HDFS3.3.1-Namenode-租约管理

租约管理前言LeaseManager.LeaseLeaseManager添加租约 - addLease租约检查 - FsNamesystem.checkLease租约更新 - renewLease删除租约 - removeLease租约检查 - Monitor 线程租约恢复 - Monitor 线程发起租约恢复 - 其他方式发起前言 我们知道 HDFS 文件是 write-once-read-man…

CloudCompare插件开发之点云如何创建、保存并显示?

文章目录0.引言1.创建插件工程2.代码编写3.显示点云4.保存点云0.引言 CloudCompaer是一款优秀的开源软件,在点云处理时可以根据实际要求开发合适的插件,在实际使用中,创建点云、保存点云、显示点云的操作较为基础,为了使这些操作得…

施工组织设计合集

34-6 施工组织设计02017-年亲曼旗大镇市政道路及广场公园园林绿化工程(第一.A1-1五中教学楼施工组织设计A2施工组织设计(方案) 报审表hasuploaded-中建施|组织设计 (22P)安徽大包庄125万吨疏铁矿斜坡道施工组织设计 (修改)宝山万科四季花城施T组织设计 (126P)对税信息培训中心装…

软件测试,月薪还没过万的进来看

目录 前言 一、技能提升 二、多语言掌握 三、团队协作 四、持续学习 五、提高测试效率 六、质量保障 七、职业发展 八、总结 前言 在当今IT行业中,软件测试是一个不可或缺的环节。随着互联网和移动应用的发展,对软件质量的要求也越来越高。因此…

前后端分离架构

前后端分离架构介绍 前后端分离已成为互联网项目开发的业界标准使用方式,将前端和后端的开发进行解耦。并且前后端分离会为以后的大型分布式架构、微服务架构、多端化服务(各种客户端,比如浏览器、车载终端、安卓、IOS等)打下坚实…

[Netty] FastThreadLocal (十四)

文章目录1.FastThreadLocal介绍2.FastThreadLocal分析3.FastThreadLocal结构分析4.FastThreadLocal方法分析4.1 FastThreadLocal.get()4.2 FastThreadLocal.set()1.FastThreadLocal介绍 FastThreadLocal是Netty中常用的一个工具类, FastThreadLocal所使用的InternalThreadLoca…

[架构之路-159]-《软考-系统分析师》-10-系统分析-6-现有业务流程分析, 系统分析最核心的任务

目录 第 10章 现有系统 分 析 1 0 . 6 现有业务流程分析 10.6.1 业务流程分析槪述 1 . 业务流程分析的步骤 2 . 业务流程分析的方法 10.6.2 业务-流程图TFD 1. T F D 的基本符号 2. TFD的绘制 10.6.3 业务 - 活动图 10.6.4 业务流程建模BPM 1. B P M 概述 2 . 标杆…

Pytest自动化测试框架一些常见的插件

Pytest拥有丰富的插件架构,超过800个以上的外部插件和活跃的社区,在PyPI项目中以“ pytest- *”为标识。 本篇将列举github标星超过两百的一些插件进行实战演示。 插件库地址:http://plugincompat.herokuapp.com/ 1、pytest-html&#xff1…

python机器学习决策树和SVM向量机算法实现红酒分类

1、红酒数据介绍 经典的红酒分类数据集是指UCI机器学习库中的Wine数据集。该数据集包含178个样本,每个样本有13个特征,可以用于分类任务。 具体每个字段的含义如下: alcohol:酒精含量百分比 malic_acid:苹果酸含量&a…

中科大ChatGPT学术镜像小白部署教程,全民都可以拥抱AI

docker…不会用…python不会用…服务器默认python版本3.6不会升级…代理也不会配置…各种命令不会用… 那么下面就是最简单办法,点点点即可【希望有帮助?】 文章目录一、体验镜像地址二、 基本配置2.1 config.py文件2.2 main.py文件三、下载项目四、项目…

FRP内网穿透配置

FRP内网穿透(WIN) 官方文档:点击进入 1.下载地址:点击进入 2.linux 压缩命令:tar -zxvf 包名,即可! 3.linux配置服务端(frps) [common] bind_addr0.0.0.0 # frp监听的…