当前位置: 首页 > news >正文

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的列表中,说明修改记录的事务已经提交了,那么该记录就是可见的。
http://www.jsqmd.com/news/334225/

相关文章:

  • 【干扰仿真】基于matlab BPSK系统性能转发式干扰影响【含Matlab源码 15037期】
  • 基于java的客户管理系统的设计与实现(11871)
  • CF2092C 学习笔记
  • AI + 质量:高效工作新方法
  • 基于Java的旅游网站的设计与实现(11873)
  • springboot学校社团管理系统-开题报告
  • 2026年济南汽车电瓶服务商 TOP5 推荐:从选购到安装的实用之选 - 海棠依旧大
  • springboot网络播放器设计与实现-开题报告
  • springboot学生网上选课系统的设计与实现-开题报告
  • 数论——大公因与小公倍
  • “印”见匠心:2026四川书刊画册、手提袋、包装盒与防伪标签厂家深度推荐 - 深度智识库
  • mysql专题总结
  • CF2098B 学习笔记
  • CF2086B 学习笔记
  • springboot学分管理系统-开题报告
  • 数据增量推送技术方案文档
  • 【VMware】VMware 安装kali 相关问题
  • <span class=“js_title_inner“>Orval 中存在严重的代码注入漏洞,存在供应链安全风险</span>
  • 【开发工具】Windows 11 安装 Miniforge,配置国内源
  • RocketMQ Hook 实现
  • 2026春节送健康才是真心意!精选8大高端滋补礼盒品牌推荐,看这篇就够 - 资讯焦点
  • 【VMware】VMware安装Ubuntu虚拟机教程,图文详细
  • AI玩具市场2026全景报告:351 亿赛道爆发,三大人群需求定义未来
  • 出题记录
  • 智能体来了(西南总部):Agent失序下的AI Agent指挥官与AI调度官
  • [todo]try catch no | result yes
  • <span class=“js_title_inner“>城市发展中心:2026年英国城市经济展望</span>
  • 黄金暴跌启示录:是牛回头还是拐点将至?
  • 阿里云携手模思智能构建一站式多模态数据处理平台
  • 票号