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

MVCC详解

目录

undo日志版本链

read view一致性视图

MVCC过程分析

读事务&写事务


  • Multi-Version Concurrency Control多版本并发控制
  • 已提交可重复读隔离级别实现了MVCC机制

undo日志版本链
  • 一行数据修改MySQL保留修改前数据undo日志)
  • 使用trx_idroll_pointer这些undo日志串联形成一个历史记录版本

read view一致性视图
  • 在可重复读隔离级别下,开启事务后,执行任何查询sql是会生成当前事务的一致性视图视图事务结束之前永远不会发生变化
  • 在读已提交隔离级别下每次执行查询sql都会重新生成一致性视图
  • 一致性视图执行查询所有为提交事务id数组以及已创建最大事务id(max_id)组成
  • 提交事务id数组存在事务idmin_id)
  • 事务任务sql查询结果需要使用查询记录提交trx_id一致性视图作对比决定记录是否当前事务可见

  • 据图对比规则如下
    • 记录trx_id<min_id时,说明在生成一致性视图事务已经提交数据可见
    • 记录trx_id>max_id说明生成一致性视图事务还未开始数据不可见
    • 记录的min_id<=trx_id<=max_idtrx_id一致性视图说明生成一致性视图事务已开始但是未提交数据不可见
    • 记录的min_id<=trx_id<=max_idtrx_id不在一致性视图说明在生成一致性视图时,该事务已提交数据可见

MVCC过程分析

操作

事务A

事务B

事务C

设置隔离级别开启事务

事务A执行查询

此时生成一致性视图

[事务A] 事务A

事务B修改数据提交

事务A再次查询

根据一致性视图[事务A] 事务A比对事务B修改数据不可见还是读取之前数据

事务C执行查询

此时生成一致性视图

[事务A,事务C] 事务C

对比一致性视图事务B修改数据可见

事务A修改数据提交

事务C再次查询

根据一致性视图[事务A,事务C] 事务C

对比事务A修改数据不可见

读事务&写事务

开启事务mysql执行select 真正开启事物生辰一致性视图

mysql执行updateselect ... for update,insertdelete真正开启写事物

相关文章:

  • maven工程中引入外部jar
  • 信息系统项目管理工程师备考计算类真题讲解八
  • 拥抱健康生活,解锁养生之道
  • Trae或者VsCode无法识别相对路径(不自动切换工作目录)
  • VSCode如何修改默认扩展路径和用户文件夹目录到其他盘以及微信开发工具如何修改扩展路径到其他盘
  • C# 音频分离(MP3伴奏)
  • WHAT - 区分 Git PR 和 MR
  • 使用setGraphicsEffect重新设置阴影导致程序崩溃的问题
  • IP的基础知识以及相关机制
  • QTcpSocket 和 QUdpSocket 来实现基于 TCP 和 UDP 的网络通信
  • 爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取
  • kubernetes》》k8s》》Dashboard
  • 2025新版懒人精灵零基础及各板块核心系统视频教程-全分辨率免ROOT自动化开发
  • idea连接远程服务器kafka
  • MySQL:数据库设计
  • 主流操作系统对比分析(macOS、Linux、Windows、Unix)
  • GitHub万星项目维护者分享:开源协作的避坑指南
  • 【技术派后端篇】技术派中 Session/Cookie 与 JWT 身份验证技术的应用及实现解析
  • Trae+DeepSeek学习Python开发MVC框架程序笔记(一):1个程序实现MVC
  • R/G-B/G色温坐标系下对横纵坐标取对数的优势
  • “2025上海西九文化周”启动,香港顶尖文艺6月齐聚申城
  • 嫦娥五号月球样品将借给这些国家机构
  • 福建海警位金门附近海域依法开展常态化执法巡查
  • 中方警告韩国公司不要向美军工企业出口含中国稀土矿物产品?外交部回应
  • 最高检发布知识产权检察白皮书,“知识产权检察厅”同日亮相
  • 陈曦任中华人民共和国二级大法官