MySQL的MVCC机制

article/2025/9/15 12:02:06

系列文章:关系型/非关系型【数据库】知识脉络

目录

MVCC翻译成中文是?

MVCC(Multi-Version Concurrency Control)

回顾事务

MVCC是单打独斗吗?

undo日志版本链

read view机制详解

MVCC机制是拿undo日志链和read-view对比

比对规则:

总结


MVCC翻译成中文是?

MVCC(Multi-Version Concurrency Control)

multi ['mʌlti] : 多 version ['və:ʃən] :版本 concurrency 
 [kənˈkʌrənsɪ] :并发 Control  控制

好了,MVCC机制是多版本并发控制机制。

        提到多版本、并发、控制...那不就是MySQL的事务控制吗?原来MySQL的事务采用MVCC机制做到的。那MySQL的事务是哪种,MVCC又是怎样做到的?


回顾事务

  • 问:事务隔离级别有哪些?
  • 答:读未提交,读已提交,可重复读,串行化
  • 问:MySQL的默认采用的事务是哪种?
  • 答:可重复读
  • 问:Oracle的默认事务隔离级别是什么?
  • 答:读已提交

        可见读已提交、可重复读都是很常见的,Mysql在读已提交和可重复读隔离级别下都实现了MVCC机制。


MVCC是单打独斗吗?

        mvcc是有组织有纪律的团伙,重要成员为 undo日志版本链 和 read view机制。

undo日志版本链

        undo日志版本就是每个事务修改了某条记录,undo日志会把修改前的那数据记入日志,所谓“链”就是指针串联。

        实现此功能:两个MySQL默默隐藏记下的字段:trx_id(记录事务id) 和 roll_pointer(指针指向上一版本)

 

read view机制详解

一致性视图read-view解释:

  • 当事务开启,执行任何查询sql时,会生成当前事务的一致性视图read-view,该视图在事务结束之前都不会变化。
  • 视图组成:(执行查询时
    • 所有未提交事务id数组(数组里最小的id为min_id)
    • 已创建的最大事务id(max_id)

  

MVCC机制是拿undo日志链和read-view对比

        事务里的任何sql查询结果,需要从对应undo日志版本链里的最新数据开始逐条跟read-view做比对从而得到最终的快照结果。

比对规则:

  1. trx_id < min_id   =>  表示这个版本是已提交的事务生成的,这个数据是可见的:
    • 例如037号小于min_id,无论是否在视图数组内,都是已提交的。
  2. trx_id > max_id  =>  表示未开启的事务生成的,数据不可见(对自己可见):
    • 例如043号,还未创建事务,未来是个新事务。
  3. min_id <= trx_id <= max_id  =>  分两种情况
    • ​​​​​​​若 trx_id 在视图数组中,表示这个版本是由还没提交的事务生成的,不可见(若 trx_id 就是当前自己的事务是可见的);例如:38、39、41、42都是未提交事务,不可
    • 若 trx_id 不在视图数组中,表示这个版本是已经提交了的事务生成的,可见。例如:40号满足min_id <= trx_id <= max_id ​​​​​​​但是不在视图数组,证明在已提交区域。

注:如果是删除操作:mysql数据头信息(record header)里的(deleted_flag)标记位写上true,来表示当前记录已经被删除,在查询时按照上面的规则查到对应的记录如果delete_flag标记位为true,意味着记录已被删除,则不返回数据。


总结

        MVCC机制就是用read-view机制生成的视图数组与undo日志版本链上的事务id进行比对,来决定可见与不可见来实现事务隔离级别的。


http://chatgpt.dhexx.cn/article/PQ4qTEfA.shtml

相关文章

什么是MVCC机制?

什么是MVCC机制&#xff1f; 什么是MVCC多版本并发控制机制 之前我们讲到&#xff0c;事务在并发环境下会带来脏读、脏写、不可重复读等诸多问题&#xff0c;为了解决这些问题&#xff0c;保证事务的ACID特性&#xff0c;出现了诸多隔离级别去解决这些问题&#xff0c;mysql默…

MySQL InnoDB的MVCC实现机制

MySQL InnoDB的MVCC实现机制 1.MVCC概述2.MVCC的实现原理隐式字段undo日志Read View(读视图)RR隔离级别的Read View方案 1.MVCC概述 什么是MVCC&#xff1f; MVCC&#xff0c;即多版本并发控制。MVCC是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现…

MVCC原理以及隔离机制

1、mysql是如何进行数据回滚的 mysql使用了大量的 undo日志、trx_id 字段以及 roll_pointer 字段来实现的数据回滚。版本链比对规则图&#xff1a; 查询 ​ 当mysql开启一个查询时 遇到的select语句会创建一个 read-view 一致性视图&#xff0c;这个视图里面保存 一个未提交…

【MVCC多版本并发控制】MVCC 机制的原理及实现,什么是MVCC,多版本并发控制

什么是 MVCC MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制&#xff0c;是现代数据库&#xff08;包括 MySQL、Oracle、PostgreSQL 等&#xff09;引擎实现中常用的处理读写冲突的手段&#xff0c;目的在于提高数据库高并发场景下的吞吐性能。 如此一来…

MySql的MVCC实现机制

MVCC实现机制 快照读和当前读MVCC 快照读和当前读 在了解MySql的MVCC实现之前&#xff0c;需要先了解什么是快照读和当前读&#xff0c;以便于后续讲解 快照读&#xff1a;就是单纯的 SELECT 语句&#xff0c;不包括下面这两类语句: SELECT ... FOR UPDATE SELECT ... LOCK I…

MVCC机制略解

在mysql中&#xff0c;默认的隔离级别是可重复读。即在一个事物中读取到的数据总是一样的&#xff0c;即使其他事务把数据改了&#xff0c;那在这个事务中读取的数据还是第一次读取的数据。 mysql还可以设置为读已提交隔离级别。即一个事务中读取的数据&#xff0c;随着其他事务…

什么是MVCC,一文搞懂MySQL的MVCC机制

MVCC是什么 MVCC&#xff0c;即Multi-Version Concurrency Control &#xff08;多版本并发控制&#xff09;。它是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff0c;在编程语言中实现事务内存。 数据库中同时存在多个版本…

对MVCC全面解析

简介 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;即多版本并发控制。 MVCC的实现原理 我们在了解MVCC之前&#xff0c;首先先了解一下几个比较常见的锁。 读锁&#xff1a;也叫共享锁、S锁&#xff0c;若事务T对数据对象A加上S锁&#xff0c;则事务T可…

【MySQL】MVCC机制

什么是MVCC MVCC 英文全称&#xff1a;Multi-Version Concurrency Control&#xff0c;Mysql的事务隔离性就是主要靠MVCC机制来实现的。对一行数据的读和写默认是不会通过加锁互斥来保证隔离性的&#xff0c;这样避免了频繁的加锁互斥&#xff0c;而在串行化隔离级别为了保证较…

一文精通MVCC机制

MVCC(Multi-Version Concurrency Control)多版本并发控制机制 使用串行化隔离级别时&#xff0c;mysql会将所有的操作加锁互斥&#xff0c;来保证并发安全。这种方式必然降低并发性能。mysql在读已提交和可重复读隔离级别下&#xff0c;对一行数据的读和写两个操作默认是不会通…

数据库的MVCC机制

MVCC 1. 什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;&#xff0c;多版本并发控制。顾名思义&#xff0c;MVCC 是通过数据行的多个版 本管理来实现数据库的 并发控制 。这项技术使得在InnoDB的事务隔离级别下执行 一致性读 操作有了保 证。换言…

MySQL之MVCC机制

1. MVCC概念 MVCC&#xff0c;全称Multi-Version Concurrency Control&#xff0c;即多版本并发控制。MVCC是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff0c;在编程语言中实现事务内存。 在Mysql的InnoDB引擎中就是指在…

【MySQL进阶-05】深入理解mvcc机制(详解)

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql的索引分类&a…

MVCC及实现原理

&#xff01;首先声明&#xff0c;MySQL 的测试环境是 5.7 前提概要 什么是 MVCC什么是当前读和快照读&#xff1f;当前读&#xff0c;快照读和 MVCC 的关系MVCC 实现原理 隐式字段undo日志Read View整体流程MVCC 相关问题 RR 是如何在 RC 级的基础上解决不可重复读的&#xf…

4gl程式debug常用技巧

1、带参数的D&#xff1a; ‘MISC’表示具体料号传入 2、指定行数设置断点 比如我要在程式axmt360中的211行开始D 进入Debug界面后按ctrlD 弹出界面 输入b 行数 点OK 出现上面表示已设置OK&#xff0c;然后点cancel或叉叉退出 最后点下面按扭&#xff0c;程式跑到210行时自…

【OpenGL】十五、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_FAN 三角形扇 )

文章目录 一、绘制 GL_TRIANGLE_FAN 三角形1、绘制 3 个点的情况2、绘制 4 个点的情况3、绘制 5 个点的情况4、绘制 6 个点的情况 二、相关资源 一、绘制 GL_TRIANGLE_FAN 三角形 GL_TRIANGLE_FAN 的绘制规则是 , 以第 1 1 1 个点作为顶点 , 第 1 , 2 , 3 1,2,3 1,2,3 个点组…

Unity3D笔记十八 GL图像库

作者&#xff1a;PEPE 出处&#xff1a;http://pepe.cnblogs.com/ 1、绘制2D图像的时需要使用GL.LoadOrtho()方法来将图形映射到平面中。 2、所有绘制相关的内容都要写在OnPostRender()方法中。 3、有关GL图像库的脚本需要绑定到Hierarchy视图中Camera上&#xff0c;否则无法…

Mapbox GL插件之echartsLayer

Mapbox GL除了本身的api具有的功能以外&#xff0c;还能够集成各种开源的类库。 ECharts 是一个使用 JavaScript 实现的开源可视化库&#xff0c;涵盖各行业图表&#xff0c;百度公司开发的&#xff0c;同时其中也有一些地图的效果。 Mapbox GL的echarts插件&#xff0c;在gith…

【OpenGL】十八、OpenGL 绘制多边形 ( 绘制 GL_POLYGON 模式多边形 )

文章目录 一、绘制 GL_POLYGON 模式多边形二、多边形绘制顺序分析三、相关资源 一、绘制 GL_POLYGON 模式多边形 使用 glBegin(GL_POLYGON) 设置绘制多边形 , 不管有几个点 , 都按照指定的顺序连接起来 ; 注意 : 这些点组成的多边形必须是凸多边形 , 不能是凹多边形 ; 代码示例…

gl_FragCoord 的含义

gl_FragCoord 表示当前片元着色器处理的候选片元窗口相对坐标信息&#xff0c;是一个 vec4 类型的变量 (x, y, z, 1/w)&#xff0c; 其中 x, y 是当前片元的窗口坐标&#xff0c;OpenGL 默认以窗口左下角为原点&#xff0c; 在 着色器中通过布局限定符可以重新设定原点&#xf…