MySql MVCC 机制

在说MVCC机制前我们先了解ReadView。

ReadView是什么呢?在我们平时执行一个事务的时候,就会生成一个ReadView,ReadView的组成结构大致如下

参数说明:

  1. creator_trx_id:当前事务id
  2. m_ids:所有事务的事务id
  3. min_trx_id:m_ids里最小的事务id值
  4. max_trx_id:最大事务id

我们来具体分析一下ReadView的作用,以及是如何解决脏读幻读,不可重复读的问题的

现在数据有一条数据,如下原始值,上一个已经提交事务的事务txr_id=30

此时两个事务并发执行, 事务A(txr_id= 40),事务B(txr_id=50),事务A要读取这行数据,事务B要更新这行数据。

此时事务A在读取时开启ReadView,此时的ReadView的值如下:

m_ids:=[40,50]

min_trx_id=40

max_trx_id=51

creator_trx_id=40

事务A在第一次查询发起一个判断,判断当前数据的txr_id是否小于ReadView中的min_trx_id(此时txr_id (30)< min_trx_id(40)),说明在A事务开启前,修改这行数据的事务已经提交了,所以可以查询这条数据

接着事务B开始修改数据为B值,然后将这行数据的txr_id设置为自己的txr_id(50),然后将roll_pointer指向之修改前生成的undo log备份,然后提交事务

此时A再重复查询,当读取B修改的数据时,发现在ReadView中min_txr_id(40)<txr_id(50)<max_trx_id(51),同时txr_id=50在m_ids,可以确定修改数据的事务和自己处于同一时间并发提交的,为了保证可重复读,这行数据是不能查询的,所以需要通过roll_pointer顺着undo log链表找到最近的一条undo log,即修改前的值,找到txr_id = 30(B未修改的值) 发现此时原始值的 txr_id < min_trx_id,说明这条数据肯定是在事务A开启钱前提交的,所以可以查询,就查询txr_id=30的值,即查询的的还是原始的值,这样就保证了可重复读

如果此时的数据隔离级别是Read committed,即B事务一旦提交,A下次查询就可以马上查询到事务B提交的值了,ReadView是如何做到这一点的呢?
那就是每次事务A查询时都新生成ReadView,来看看在事务B提交后A重新查询后生成的ReadView是什么样的

这次A重复查询在ReadView中 min_txr_id(40)<txr_id(50)<max_trx_id(41),但是事务B的事务id不在m_ids中,说明事务B虽然和自己同一时间开启,但是已经提交了事务,所以可以查询B修改的数据即txr_id = 50的值

接着事务A再更新这行数据,此时这行数据的trx_id=40,此时数据如下

此时事务A重新查询,发现txr_id=40 = creator_trx_id,说明这条数据就是自己修改的,也是可以读取到,所以就读取到

如果此时再开启一个事务C,事务id=60,更新这行数据

如果A再次查询会发现trx_id=60 > max_trx_id(id=51),说明事务C是事务A开启后开启的,自己也是不能读取到,所以也是顺着undo log向下找到 txr_id = 40 读取到值

同理如果事务隔离级别是 Repeatable read,C事务插入一条数据也是如此,A是读取不到的,从而也解决了幻读问题

关于我

觉得文章不错请扫码关注我吧

从ReadView深入理解MySql MVCC原理相关推荐

  1. 理解mysql 底层原理

    理解mysql 底层原理 mysql 关系数据库的一种,开源免费,支持百万级的存储性能.性能稳定.社区活跃 鉴于 本人半路出家,对于一些原理的东西都不怎么了解,正好 无所事事的情况下,翻博客,吸取知识 ...

  2. 赠书:深入理解MySQL主从原理

    根据经验,想要快速学习一门技术有3种方式. 第一种方式是通过代码来理解它的实现,反推它的逻辑. 这种方式的难度很大,而且起点相对高,能够沉浸其中的人非常少,过程相对来说是苦闷的,但如果能够沉下心来看代 ...

  3. mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制

    轻松理解MYSQL MVCC 实现机制 轻松理解MYSQL MVCC 实现机制 #### 1. MVCC简介 ##### 1.1 什么是MVCC MVCC是一种多版本并发控制机制. ##### 1.2 ...

  4. 《深入理解MySQL主从原理32讲》推荐篇

    导读: 作者:高鹏(网名八怪),<深入理解MySQL主从原理32讲>系列文的作者.2008年开始至今一直从事Oracle/MySQL相关工作,现任易极付高级DBA,Oracle Ocm. ...

  5. mysql mvcc 原理详解

    前言 很多人在谈起mysql事务的时候都能很快的答出mysql的几种事务隔离级别,以及在各自隔离级别下产生的问题,但是一旦谈到为什么会产生这样的结果时会觉得难以回答,说到底,还是对底层的原理未做深入的 ...

  6. 看一遍就理解:MVCC原理详解

    前言 MVCC实现原理是一道非常高频的面试题,最近技术讨论群的小伙伴一直在讨论,趁着国庆节有空,我们一起来聊聊. 1. 相关数据库知识点回顾 1.1 什么是数据库事务,为什么要有事务 事务,由一个有限 ...

  7. 理解MYSQL MVCC 实现机制

    1. MVCC简介 1.1 什么是MVCC MVCC是一种多版本并发控制机制. 1.2 MVCC是为了解决什么问题? 大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使 ...

  8. php开源mvccms_轻松理解MYSQL MVCC 实现机制

    1. MVCC简介 1.1 什么是MVCC MVCC是一种多版本并发控制机制. 1.2 MVCC是为了解决什么问题?大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用 ...

  9. mysql mvcc实例讲解_轻松理解MYSQL MVCC 实现机制

    1. MVCC简介 1.1 什么是MVCC MVCC是一种多版本并发控制机制. 1.2 MVCC是为了解决什么问题? 大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使 ...

最新文章

  1. ApiOperationSupport注解的使用
  2. 解决ajax 发送post 请求时csrf_token 问题
  3. 分析脚本文件AndroidInitProcess分析心得(1)
  4. Bootstrap富文本编辑器-bootstrap-wysiwyg
  5. 小甲鱼Python笔记(下)
  6. Android窗口管理(2)——消息传递
  7. Jenkins与Docker的自动化CI/CD实战
  8. 机器学习 --- 3. 贝叶斯怎么想?(转)
  9. 《数据库原理MySQL》第三次上机实验
  10. 2021别再废掉了!学会这个用这个做PPT,高效神器保住你的发际线~
  11. 学习Coverity codexm的一些资料
  12. onenote打开闪退平板_ipad pro 11英寸。onenote闪退 无法使用
  13. 5G适合py还是java,5G比4G到底有啥好处?看完就彻底明白了
  14. 如何用自签名证书为.sis文件签名
  15. Tableau实战 Tableau官网各版块访问情况(一 ~ 四汇总)仪表盘
  16. [R] R语言删除字符串中的空值““
  17. 湖南工大计算机学院大一分班,不懈奋斗,书写无悔青春 --中国矿业大学计算机学院14-05班获评校级“优良学分班”称号...
  18. 邓俊辉 数据结构 图
  19. 经典物理建模钢琴-4Front TruePianos v1.9.8 WiN-MAC
  20. 安规标准确定爬电距离和电气间隙

热门文章

  1. [ROS]动态参数设置-可视化调试-创建cfg文件
  2. php 正则匹配utf8中文
  3. 外挂辅助技术原理分析
  4. 南陵萃英园2021年高考成绩查询,南陵县萃英园中学2019年高考捷报(一)
  5. 地图开发是怎么应用起来的?哪里去找地图开发服务?
  6. github详细配置
  7. 燃鹅在线工具网易托管视频解析等综合多功能聚合在线工具箱源码
  8. ES6基础:let和const
  9. vue项目 IE浏览器打开报错:strict 模式下不允许一个属性有多个定义
  10. 计算机和城轨学哪个好,地铁、城轨、轻轨三者有什么区别?