news 2026/4/18 6:44:49

MySQL的MVCC

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL的MVCC

什么是MVCC:

MVCC是多版本并发控制器,是通过记录历史半本书,解决读写并发冲突问题,避免了读数据时加锁,提高了事务的并发性能。

讲历史数据存储在undo log中,结构逻辑上类似于一个链表,MySQL数据行上的两个隐藏列,一个是事务ID,一个是指向undo log的指针

事务开启后,执行第一条select语句的时候,会创建ReadView,ReadView记录了当前未提交的事务。通过与历史数据的事务ID进行比较,就可以根据可见性规则进行判断,判断这条记录是否可见,如果可见就直接将这条数据返回个客户端,如果不可见就继续王undo log版本链查找第一个可见的数据。

我们每一条记录都有两个隐藏列,一个是事务ID,一个是指向历史数据undo log的指针,然后ReadView有四个字段,分别是创建ReadView的事务ID,活跃事务ID列表,活跃事务ID列表中的最小ID,下一个事务ID。主要有这几种判断规则:

  • 如果记录事务的ID小于活跃事务ID列表中的最小ID,就说明记录在创建ReadView前就生成好了,所以该记录当前事务是可见的。
  • 如果记录事务的ID大于等于下一个事务的ID,就说明该记录是在创建ReadView后才生成的, 所有该记录是当前事务不可见的。
  • 如果记录隐藏列的事务ID在最小的ID和下个事务的ID之间,这时候就需要看记录的事务ID是否在活跃事务的ID列表中
    • 如果记录的事务ID在活跃事务的ID列表中,说明修改该记录的事务还没提交,所以该记录是不可见的
    • 如果记录的事务ID不在活跃事务ID的列表中,说明修改记录的事务已经提交了,那么该记录就是可见的。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:24:56

力扣1046和1049学习笔记

1.概要碎石头问题,拿两个石头碰撞,抵消共同质量的部分,1046是每次选最重两个,1049是任意选,让质量尽可能小。2.大根堆每次维护最重,如果直接排序的话复杂度过高,因此可以用大根堆,它…

作者头像 李华
网站建设 2026/4/18 6:24:02

cpp对象模型学习笔记1.1-2.8

1.什么是cpp对象模型cpp对象模型是指编译器实际上是怎么实现的c的对象,比如构造函数、析构函数、虚函数、继承关系。2.构造函数在学cpp的时候一般会有这样的知识被告知,当我们没有主动写任何类的构造函数的时候,编译器会为我们合成一个默认的…

作者头像 李华
网站建设 2026/4/18 7:38:38

食品X光异物检测机:性能评估与核心技术解析

处于食品工业高度自动化的当下,生产线末尾的产品质量管控环节极其重要,其中,X光异物检测机已然成为确保食品安全、维护品牌名声的关键设备中的一个,它借助X射线穿过产品,按照内部物质密度差别生成图像,进而…

作者头像 李华
网站建设 2026/4/18 7:36:55

国产化系统中,SpringMVC如何支持百M大文件的快速下载?

大文件传输解决方案 作为福建农业集团的项目负责人,我理解您面临的是一个具有挑战性的大文件传输需求,涉及国家安全级别的高要求。基于您提供的详细需求,我将从技术架构、解决方案和源代码示例三个方面为您提供专业建议。 一、需求分析与技…

作者头像 李华