MVCC详细介绍及面试题
目录
1.什么是mvcc?
2.问题引入
3. MVCC实现原理?
3.1 隐藏字段
3.2 undo log 日志
3.2.1 undo log版本链
3.3 readview
3.3.1 当前读
编辑
3.3.2 快照读
3.3.3 ReadView中4个核心字段
3.3.4 版本数据链访问的规则(了解)
4.面试题
前言:mysql中的Redolog日志保证了事务的持久性,Undolog保证了事务的原子性和一致性(回滚)
那事务的隔离性是怎么保证的呢?
答:
1. 锁:排他锁(如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁)
2. mvcc:多版本并发控制
这里主要讲一下mvcc
1.什么是mvcc?
多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突
2.问题引入
下面是一行数据,事务2、3、4都并发的对这行数据进行修改,而事务5要查询两次这行的最新数据,问查询到的是哪一次事务执行到的结果?
如果你看到这里不知道结果,请你继续往下看
3. MVCC实现原理?
MVCC的具体实现,主要依赖于数据库记录中的隐式字段、undo log日志、readView。
3.1 隐藏字段
3.2 undo log 日志
回滚日志,在insert、update、delete的时候产生的便于数据回滚的日志。
当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除。
而update、delete的时候,产生的undo log日志不仅在回滚时需要,mvcc版本访问也需要,不会立即被删除。
3.2.1 undo log版本链
不同事务或相同事务对同一条记录进行修改,会导致该记录的undolog生成一条记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。
下面是事务
3.3 readview
ReadView(读视图)是快照读。是一个事务在执行 快照读(SELECT 等语句) 时生成的,它保存了4个关键字段(3.4.3 有介绍)
3.3.1 当前读
读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,
如:select ... lock in share mode(共享锁),select ... for update、update、insert、delete(排他锁)都是一种当前读。
3.3.2 快照读
简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。
读已提交 RC (Read Committed:每次select,都生成一个快照读。
可重复读 RR (Repeatable Read)(MySQL 的默认隔离级别):开启事务后第一个select语句才是快照读的地方。
3.3.3 ReadView中4个核心字段
ReadView(读取视图) 是一个事务在执行 快照读(SELECT 等语句) 时生成的,它保存了以下关键字段:
还以下面的例子来解释:
事务五第一次查询id为30的记录,此时:
m_ids:当前活跃的事务ID集合是事务三、四、五。因为在事务五第一次查询之前事务二已经提交了(事务执行完毕)。
min_trx_id:最小活跃事务ID是事务三的id为3
max_trx_id:预分配事务ID,当前最大事务ID+1(因为事务ID是自增的),为事务5的id+1是6
creator_trx_id:ReadView创建者的事务ID ,即为是事务五的id 5
不同的隔离级别,生成ReadView的时机不同:
读已提交 RC READ COMMITTED :在事务中每一次执行快照读时生成ReadView。
可重复读 RRREPEATABLE READ:仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView。
3.3.4 版本数据链访问的规则(了解)
①. trx_id == creator_trx_id ? 可以访问该版本
②. trx_id < min_trx_id ? 可以访问该版本
③. trx_id > max_trx_id ? 不可以访问该版本
④. min_trx_id <= trx_id <= max_trx_id ? 如果trx_id不在m_ids中是可以访问该版本的
还以下面5个事务来举例子:
还以事务五第一次查询举例分析可以得到以下结论
上述 ①~④ 是 InnoDB 在使用 MVCC 机制进行快照读(Snapshot Read)时判断一个版本是否可见的规则,目的是为了实现事务隔离性(尤其是可重复读)。
核心依据是将数据行上的 trx_id
与当前事务的 ReadView
(读取视图)中的一些字段做比较,判断是否可以“看到”这个版本。
详细解释:
①.当前事务的id(未知),等于事务创建者的id(这里是事务五),所以当前事务是事务五,说明当前数据是由“我自己”这个事务修改的。MVCC 当然允许自己看到自己改过的数据(包括未提交的),以确保 读到的是自己操作后的最新快照。
②.当前事务的id(未知),小于最小活跃事务ID(这里是事务三),所以当前事务是事务二,而事务二已经提交,
-
说明这个事务在我生成 ReadView 之前就已经提交了。
-
因此是 对我“可见”的历史版本数据。
③.当前事务的id(未知),大于最大活跃事务ID+1(这里是事务五),所以当前事务是事务六,事务六在此时ReadView 生成时,事务六还没有创建
-
所以它对我来说是“未来”的数据。
-
根据事务隔离的原则,我不能看见这个数据版本。
④. min_trx_id <= trx_id <= max_trx_id,这个事务是在我生成 ReadView 时是活跃的(ID 在 min~max 之间),但它不在活跃事务列表 m_ids
中,说明它已经 提交完成了,因此我可以看见它。和②.表达的意思一样
不同的隔离级别,生成ReadView的时机不同:
读已提交 RC READ COMMITTED :在事务中每一次执行快照读时生成ReadView。
可重复读 RRREPEATABLE READ:仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView。
举例:
4.面试题
相关文章:
MVCC详细介绍及面试题
目录 1.什么是mvcc? 2.问题引入 3. MVCC实现原理? 3.1 隐藏字段 3.2 undo log 日志 3.2.1 undo log版本链 3.3 readview 3.3.1 当前读 编辑 3.3.2 快照读 3.3.3 ReadView中4个核心字段 3.3.4 版本数据链访问的规则(了解&#x…...
designware IP如何被FPGA综合
DW的IP要被vivado等综合还是很麻烦的,而是用synplify等综合工具,然后再嫁接到vivado中也非常麻烦。本文提供一种解决办法。 1. 对DW的IP进行gtech综合。即使用DC工具对DW IP进行综合。而使用的综合库是gtech。脚本如下: set target_library…...
图像预处理-色彩空间补充,灰度化与二值化
一.图像色彩空间转换 1.1 HSV颜色空间 HSV颜色空间使用色调(Hue)、饱和度(Saturation)和亮度(Value)三个参数来表示颜色 一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本…...
C语言socket绑定本地端口和查询
查询 // 查询本地地址和端口(在没有绑定的情况下,系统会自动分配一个端口)struct sockaddr_in local_addr;socklen_t addr_len sizeof(local_addr);if (getsockname(sockfd, (struct sockaddr*)&local_addr, &addr_len) 0) {std::c…...
Centos7编译安装sudosh2
Centos7编译安装sudosh2 sudosh2简介安装sudoshCentos7编译安装sudosh2步骤 1:Debian安装 sudosh步骤 2:配置 sudosh步骤 3:查看会话记录重播会话注意事项 sudosh2简介 sudosh2项目地址: https://github.com/squash/sudosh2 虽然项目已经停…...
C#使用httpClient.PostAsync()界面卡死
背景:部分代码移植后运行到httpClient.PostAsync()时界面就卡死。 代码片段: 解决办法: 把HttpResponseMessage response await httpClient.PostAsync(requestUrl, content); 改为HttpResponseMessage response httpClient.PostAsync(req…...
基于深度学习的狗鼻纹身份识别
基于深度学习的狗鼻纹身份识别 1. 技术背景 根据GMI报告,2020年全球宠物护理市场规模超过2320亿美元。随着宠物经济的快速发展,宠物福利问题日益突出。在宠物管理、交易、保险、医疗等许多场景中,宠物识别是一个具有挑战性的问题࿰…...
面试题:Eureka和Nocas的区别
Eureka 与 Nacos 核心区别对比 一、功能定位与核心能力 维度EurekaNacos核心功能专注服务注册与发现,无配置管理功能:ml-citation{ref“1,3” data“citationList”}集成服务注册、发现、配置管理、动态DNS等:ml-citation{ref“1,3” data“c…...
MongoDB入门与安装指南
目录 一、MongoDB简介 二、MongoDB安装 (一)MongoDB Server安装 (二)MongoDB Compass安装 三、MongoDB与Spring Data MongoDB框架的连接 四、总结 一、MongoDB简介 MongoDB是一种高性能、开源的NoSQL(非关系型&…...
排序算法复杂度及稳定性全解析(八种排序)
在计算机科学领域,排序算法是基础且重要的内容。不同的排序算法在时间复杂度、空间复杂度以及稳定性上存在差异,合理选择排序算法能极大提升程序性能。本文将对常见排序算法进行全面剖析,并引入计数排序这一特殊的排序算法。 一、常见排序算…...
PTA:古风排版
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。 输入格式: 输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串&a…...
华熙生物亮相消博会,这次又带来了什么样的变化?
首先,从展示层面来看,华熙生物在消博会上构建科技桥梁,展台主视觉展示糖生物学发展历程与自身发展交织历程,这象征着中国生物科技企业从产业突围到定义全球标准的蜕变。这一展示不仅提升了华熙生物的品牌形象,更向外界…...
【设计模式】适配器模式:让不兼容的接口和谐共处
引言 在软件开发中,我们经常会遇到这样的情况:两个已经存在的接口无法直接协同工作,但我们又希望它们能够无缝对接。这时,适配器模式就派上用场了。适配器模式(Adapter Pattern)是一种结构型设计模式&…...
QuickAPI 核心能力解析:构建数据服务化的三位一体生态
在企业数据资产化运营的进程中,如何打破数据开发与共享的效率瓶颈,实现从 “数据可用” 到 “数据好用” 的跨越?麦聪软件的 QuickAPI 给出了系统性答案。作为 SQL2API 理念的标杆产品,QuickAPI 通过SQL 编辑器、数据 API、数据市…...
vue3 elementPlus中el-tree-select封装和自定义模糊搜索
:filter-node-method"filterNodeMethod"此方法对应的是模糊搜索,// 获取树形数据 const loadTreeData async () > {try {const res await deviceTree()if (res.data) {treeData.value res.data// 构建 ID 到标签的映射idMap.value new Map()const …...
【哈夫曼树和哈夫曼编码是什么?】
哈夫曼树和哈夫曼编码是数据压缩领域中的核心概念,它们基于字符出现的频率来实现高效编码。下面是详细介绍,通俗易懂。 一、什么是哈夫曼树(Huffman Tree)? 哈夫曼树是一种最优二叉树,用于构造最短的前缀编…...
量子纠缠物理本质、技术实现、应用场景及前沿研究
以下是关于 量子纠缠(Quantum Entanglement) 的深度解析,涵盖物理本质、技术实现、应用场景及前沿研究,以技术视角展开: 一、量子纠缠的物理本质 1. 核心定义 量子纠缠是多个量子系统(如粒子)间的一种关联状态,表现为: 非局域性:纠缠态粒子无论相距多远,测量其中一…...
时间的重构:科技如何重塑人类的时间感知与存在方式
时间是人类认知的基石,也是科技发展的终极命题。从石英钟到量子计时器,从日晷到区块链时间戳,技术不断重构着我们对时间的理解与利用。然而,当人工智能、量子计算和脑机接口等前沿技术开始挑战时间的线性本质时,我们不…...
现代测试自动化框架教程:Behave接口测试与Airtest移动端UI自动化
前言 我发现每天还是陆陆续续有人在看我之前写的自动化框架搭建的文档;即使很早就有新的框架,更好的选择出来了;所以特别写了这一篇目前大厂也在使用的;日活400w有实际落地的自动化测试架构方案; 随着测试技术…...
linux-设置每次ssh登录服务器的时候提醒多久需要修改密码
在 Linux 系统中,你可以通过设置 motd(Message of the Day)或 sshd 配置来在用户通过 SSH 登录时提醒他们密码即将过期。以下是具体步骤: 方法 1: 使用 motd 文件 motd 文件在用户登录时显示,你可以通过脚本动态生成内容,提醒用户密码过期时间。 编辑 /etc/motd 文件:…...
JAVA如何操作文件?(超级详细)
目录 一、认识文件和相关知识 1.认识文件 2.⽬录 3.⽂件路径(Path) 4.文本文件和二进制文件的区分 二、File类操作文件 1.构造方法 2.方法 2.1 方法表 2.2 get相关的方法和构造方法 2.2.1 “.” 和 “..” 2.3 is相关的方法 2.4 删除相关…...
Debian服务器挂载外部存储设备的完整指南
在 Debian 系统中挂载外部存储设备(如 U 盘、移动硬盘、SSD)是服务器运维和桌面使用中非常常见的操作。本文将为你详细拆解从识别设备、格式化到手动/自动挂载的全过程,适合新手到进阶用户参考。 一、准备阶段:插入存储设备并识别 1. 插入外部设备后查看…...
搭建一个网站需要选择什么配置的服务器?
一般要考虑网站规模、技术需求等因素来进行选择。 小型网站:个人博客、小型企业官网等日均量在 1000 以内的网站,一般推荐2 核 CPU、4GB 内存、50GB 硬盘,带宽 1 - 5M。如果是纯文字内容且图片较少的小型网站,初始阶段 1 核 CPU、…...
基于STM32与NB-IoT的智慧路灯远程监控系统
标题:基于STM32与NB-IoT的智慧路灯远程监控系统 内容:1.摘要 随着城市化进程的加快,路灯作为城市基础设施的重要组成部分,其管理和维护的智能化需求日益增长。本文的目的是设计并实现一种基于STM32与NB - IoT的智慧路灯远程监控系统。采用STM32微控制器…...
【高阶数据结构】第三弹---图的存储与遍历详解:邻接表构建与邻接矩阵的BFS/DFS实现
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【高阶数据结构】 目录 1、图的存储结构 1.1、邻接表 1.1.1、边的结构 1.1.2、图的基本结构 1.1.3、图的创建 1.1.4、获取顶点下…...
Tmi-clnet:从影像学、临床和放射学数据融合判断慢性肝病预后的三模态相互作用网络——医学图像论文学习,论文源码下载
论文地址:https://arxiv.org/pdf/2502.00695v1 源码地址:https://github.com/Mysterwll/liver 一、主要内容 本文提出了名为TMI-CLNet的三模态交互网络,用于慢性肝病的预后评估。具体来说,开发了一个模态内聚合模块和一个三模态…...
SpringBoot整合POI实现Excel文件的导出与导入
使用 Apache POI 操作 Excel文件,系列文章: 《SpringBoot整合POI实现Excel文件的导出与导入》 《SpringMVC实现文件的上传与下载》 《C#使用NPOI导出Excel文件》 《NPOI使用手册》 1、Apache POI 的介绍 Apache POI 是一个基于 Java 的开源库,专为读写 Microsoft Office 格…...
编程行业语言学习与竞争剖析:探寻冷门中的机遇
编程行业语言学习与竞争剖析:探寻冷门中的机遇 在编程领域不断拓展与演变的进程里,“编程行业什么开发语言竞争小易学习” 这一问题,始终萦绕在众多编程爱好者与初涉此道者的心头。今日,我(卓伊凡,优雅草的…...
数据库学习通期末复习二
🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C语言的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…...
道可云人工智能每日资讯|首届世界人工智能电影节在法国尼斯举行
道可云元宇宙每日简报(2025年4月15日)讯,今日元宇宙新鲜事有: 杭州《西湖区打造元宇宙产业高地的扶持意见》发布 杭州西湖区人民政府印发《西湖区打造元宇宙产业高地的扶持意见》。该意见已于4月4日正式施行,有效期至…...
Python 冷门魔术方法
__init_subclass__ https://docs.python.org/3/reference/datamodel.html#object.__init_subclass__ Python 3.6 新增。 父类派生子类后会调用该方法,方法中 cls 指向派生出的子类。 若__init_subclass__被定义为普通方法,将会被隐式转换为类方法&…...
【已更新完毕】2025泰迪杯数据挖掘竞赛C题数学建模思路代码文章教学:竞赛智能客服机器人构建
基于大模型的竞赛智能客服机器人构建 摘要 随着国内学科和技能竞赛的增多,参赛者对竞赛相关信息的需求不断上升,但传统人工客服存在效率低、成本高、服务不稳定和用户体验差的问题。因此,设计一款智能客服机器人,利用人工智能技术…...
L1-028 判断素数
L1-028 判断素数 L1-028 判断素数 - 团体程序设计天梯赛-练习集 (pintia.cn) 题解 素数概念:一个数如果只能被1和这个数本身整除,那么这个数就是素数。 并且1不是素数,2是素数。 因为题目中数最长位数是9位数,所以我用了long…...
向量数据库
目录标题 阶段二:核心技术深入学习阶段三:工具与实践 1. 基础概念问题:什么是向量数据库?它与传统关系型数据库的区别是什么?问题:向量数据库的核心数据结构是什么?为什么向量适合用于高维数据&…...
《Vue3学习手记2》
今天主要学习Vue3中的数据监视: ps: 代码中的注释写的很详细,这样更有利于理解 watch 作用: 监视数据的变化(和Vue2中watch作用一致) 特点: Vue3中的watch只能监视以下四种数据: ref创建定义的数据(基本类型、对象类型)reactiv…...
zigbee和wifi都是无线通信,最大区别是低功耗,远距离!
zigbee和wifi都属于短距离无线通信技术,都使用了2.4GHz的无线频段,并采用了直接序列扩频传输技术(DSSS)。并广泛应用于人们的生产生活之中。但是,它们之间却存在很大区别。 1、传输速率不同 ①、zigbee传输速率 zigb…...
JavaWeb开发 Servlet底层 Servlet 过滤器 过滤器和拦截器 手写一个限制访问路径的拦截器
目录 万能图 过滤器自我理解 案例 实现Filter 接口 配置文件 web.xml 将过滤器映射到 servlet 用处 拦截器 手写案例 重写 preHandle() 方法 拦截处理 重写 postHandle() 方法 后处理 重写 afterHandle() 方法 完成处理 代码 如何配置拦截器 万能图 还是看一下这张…...
Zookeeper三台服务器三节点集群部署(docker-compose方式)
1. 准备工作 - 服务器:3 台服务器,IP 地址分别为 `10.10.10.11`、`10.10.10.12`、`10.10.10.13`。 - 安装 Docker:确保每台服务器已安装 Docker 和 Docker Compose。 - 网络通信:确保三台服务器之间可以通过 IP 地址互相访问,并开放以下端口: - `2181`:Zookeeper 客户…...
从北京到大同,走过600里,跨越1000年。
人们都说,在中国,地下文物看陕西,地上文物看山西,因此在一个月之前就想来山西走一走,看一看,感受一下我泱泱大国的中华千年的历史积淀。 1、出发前的小花絮 于是,就在清明车票开卖的一瞬间&…...
鸿蒙NEXT开发全局上下文管理类(ArkTs)
type CacheValue string | number | boolean | object;/*** 全局上下文管理类,用于存储和管理全局数据。* author: 鸿蒙布道师* since: 2025/04/15*/ export class GlobalContext {private static instance: GlobalContext;private _objects new Map<string, C…...
【论文阅读】Orion: Online Backdoor Sample Detection via Evolution Deviance
摘要 现有的后门输入检测策略依赖于一个假设,即正常样本和被投毒样本在模型的特征表示中是可分离的。然而,这一假设可能会被先进的特征隐藏型后门攻击打破。在本文中,我们提出了一种新颖的检测框架,称为Orion(通过进化…...
Redis之缓存雪崩
Redis之缓存雪崩 文章目录 Redis之缓存雪崩一、什么是缓存雪崩1. 定义2.核心原因① 缓存集中过期② 缓存服务故障③ 资源竞争或流量激增 3. 影响 二、缓存雪崩常见解决方案1. 分散缓存过期时间2. 多级缓存架构3. 缓存高可用设计4. 熔断与降级机制5. 缓存预热6. …...
【HarmonyOS 5】AttributeModifier和AttributeUpdater详解
【HarmonyOS 5】AttributeModifier和AttributeUpdater区别详解 一、AttributeModifier和AttributeUpdater的定义和作用 1. AttributeModifier是ArkUI组件的动态属性,提供属性设置功能。开发者可使用attributeModifier方法,通过自定义实现AttributeModi…...
C# + Python混合开发实战:优势互补构建高效应用
文章目录 前言🥏一、典型应用场景1. 桌面应用智能化2. 服务端性能优化3. 自动化运维工具 二、四大技术实现方案方案1:进程调用(推荐指数:★★★★☆)方案2:嵌入Python解释器(推荐指数࿱…...
鸿蒙开发中,@Extend、@Styles 和 @Builder 的区别
在鸿蒙(HarmonyOS)开发中,Extend、Styles 和 Builder 是三种常用的装饰器,用于提升代码复用性和可维护性。以下是它们的详细介绍和示例: 1. Extend:扩展组件样式 说明: 功能:用于…...
poll为什么使用poll_list链表结构而不是数组 - 深入内核源码分析
一:引言 在Linux内核中,poll机制是一个非常重要的I/O多路复用机制。它允许进程监视多个文件描述符,等待其中任何一个进入就绪状态。poll的内部实现使用了poll_list链表结构而不是数组,这个设计选择背后有其深层的技术考量。本文将从内核源码层面深入分析这个设计决…...
从健康干预到成本优化:健康管理系统如何驱动企业降本增效?
在全球经济竞争日益激烈的背景下,企业正面临劳动力成本上升、员工健康问题频发、医疗支出居高不下等多重挑战,在当今商业环境中,企业的降本增效至关重要,而员工的健康状况是影响企业成本和效率的关键因素之一。健康管理系统作为一…...
12【模块学习】DS18B20(二):高级使用
DS18B20 1、改变采样分辨率2、总线上有多个设备的使用2.1、获取总线上单个设备的ROM码2.2、通过匹配ROM指令使用总线上多个设备 3、项目:4路温度检测LCD显示 1、改变采样分辨率 需要改变采样的分辨率,则需要向暂存器的配置寄存器中写入配置参数。在向寄…...
NLP高频面试题(四十三)——什么是人类偏好对齐中的「对齐税」(Alignment Tax)?如何缓解?
一、什么是「对齐税」(Alignment Tax)? 所谓「对齐税」(Alignment Tax),指的是在使人工智能系统符合人类偏好的过程中,所不可避免付出的性能损失或代价。换句话说,当我们迫使AI遵循人类价值观和规范时,AI系统往往无法达到其最大理论性能。这种性能上的妥协和折衷,就…...
线代第二章矩阵第一课:矩阵的概念
一、矩阵的概念 矩阵 i还是表示的是行,j表示的是列;行数未必等于列数 同型矩阵: A,B行数相等,列数相等 矩阵相等: 同型矩阵,且对应元素相等 零矩阵: 所有元素均为0 二、特殊矩阵 方阵 行数…...