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

MySQL的MVCC机制

MVCC机制

使用MVCC(Multi-Version Concurrency Control,多版本的并发控制协议)机制来实现可重复读(REPEATABLE READ)的隔离级别

MVCC最大的优点是读不加锁,因此读写不冲突,并发性能好。InnoDB实现MVCC,是通过保存数据在某个时间点的快照来实现的,多个版本的数据可以共存,主要是依靠数据的四个隐藏列(也可以称之为标记位)和undo log。其中数据的隐藏列包括了隐含的自增主键(DB_ROW_ID),最近更改的事务ID(DB_TRX_ID)、undo log的指针(DB_ROLL_PTR)、索引删除标记(FLAG数据被删除时,并不是立即删除,而是打上删除标记,进行异步删除);在进行数据修改时,当前记录会进行加锁,把修改前的数据放入undo log中,通过undo log的指针与数据进行关联,如果修改失败,则恢复undo log中的数据

事务对一条数据进行修改时,undolog日志会成为一条记录版本的链表,链首是最新的旧记录,链尾是最早的旧记录

事务隔离级别READ COMMITTED时,对于快照数据,总是读取被锁定行的最新一份快照数据

事务隔离级别REPEATABLEREAD时,对于快照数据,总是读取事务开始时的行数据版本

ReadView

ReadView包含四个字段

  • m_ids 当前活跃的事务id集合
  • min_trx_id 最小活跃事务id
  • max_trx_id 最大事务id,已创建的最大事务id
  • creator_trx_id 快照读创建者的事务id

在READ UNCOMMITED的隔离级别下,select都是当前读;而在SERIALIZABLE级别下,是通过表锁来限制数据,所以MVCC是在READ COMMITED和REPEATABLE READ的级别下才会生效

在READ COMMITED级别下,每一次select都会重新将系统中所有活跃事务拷贝到每一个列表中生成ReadView。

在REPEATABLE READ级别下,每个事务read时,会将当前系统中所有活跃事务拷贝到一个列表中生成ReadView,后续所有select都复用该ReadView

当执行查询sql时会生成一致性视图ReadView,它是由执行查询时所有未提交事务id数组(m_ids)和已创建的最大事务id(max_trx_id)组成,查询的数据结果需要跟ReadView做对比从而得到快照结果

https://zhhll.icu/2021/数据库/关系型数据库/MySQL/进阶/24.MVCC机制/

本文由 mdnice 多平台发布

http://www.lryc.cn/news/296173.html

相关文章:

  • stable-diffusion | v1-5-pruned.ckpt和v1-5-pruned-emaonly.ckpt的区别
  • 基于Springboot的足球社区管理系统(有报告)。Javaee项目,springboot项目。
  • 8.0 Zookeeper 四字命令教程详解
  • 【MySQL】学习和总结DCL的权限控制
  • React+Antd实现表格自动向上滚动
  • 网络安全产品之认识准入控制系统
  • Text2SQL研究-Chat2DB体验与剖析
  • JavaScript相关(二)——闭包
  • MySQL的DDL语言
  • <网络安全>《21 工业安全审计系统》
  • 实例分割论文阅读之:《Mask Transfiner for High-Quality Instance Segmentation》
  • 阿里 EasyExcel 表头国际化
  • 跨境电商新风潮:充分发挥海外云手机的威力
  • Kubernetes实战(二十七)-HPA实战
  • IDEA 配置以及一些技巧
  • Android 11 访问 Android/data/或者getExternalCacheDir() 非root方式
  • Eclipse安装配置、卸载教程(Windows版)
  • 正点原子--STM32基本定时器学习笔记(2)
  • 学习笔记:正则表达式
  • 03-抓包_封包_协议_APP_小程序_PC应用_WEB应用
  • C语言笔试题之实现C库函数 strstr()(设置标志位)
  • 什么是IDE,新手用哪个IDE比较好
  • Flask 入门6:模板继承
  • 欢迎来到操作系统的世界
  • 寒假作业-day5
  • 互联网加竞赛 基于深度学的图像修复 图像补全
  • 用于制作耳机壳的UV树脂耳机壳UV胶价格高不高?
  • 【开源】JAVA+Vue+SpringBoot实现房屋出售出租系统
  • Golang 并发 生产者消费者模式
  • Win32 SDK Gui编程系列之--ListView自绘OwnerDraw