MySql的MVCC多版本控制

undolog:回滚日志(保证一致性)只有在ReadCommited和RepeatableRead隔离级别有用

redolog:重写日志(保证持久性)

示例讲解

ReadCommited隔离级别(4) select1=张三,select2=张小三

RepeatableRead隔离级别(4) select1=张三,select2=张三

其中两个概念:

  • ReadView(快照读):select语句,每进行一次select就会触发一次快照生成ReadView,记录m_ids(当前未提交事务)、min_trx_id(当前最小事务号)、max_trx_id(当前最大事务号+1)、creator_trx_id(本事务号)
  • 当前读:update、delete、select ..for update、select ..lock share,每修改一次数据,会将日志记录在undolog中,并为修改列添加TRX_ID(事务编号)和ROLL_PTR(指向上一条事务的指针)字段

如上前3次修改就会形成如下版本链,第四个事务的第一次select会触发一次ReadView

版本链数据访问规则

for(当前事务id3,2,1判断){

1.判断当前事务id=creator_trx_id(4)?  成立,说明数据就是本身事务,可以直接访问(break当前事务数据)

2.判断当前事务id<min_trx_id(2)? 成立,说明数据已经提交,可以直接访问(break当前事务数据)

3.判断当前事务id>max_trx_id(5)? 成立,说明该事务在ReadView生成后才启动,不允许访问

4.判断min_trx_id<(2)=当前事务id<=max_trx_id(5)? 成立,查看当前事务是否在m_ids列表不存在数据,则代表已经提交,可以访问(break当前事务数据);ids中存在,则表示事务还未提交,根据指针到下一个事务判断

}

ReadCommited和RepeatableRead的差别是在同一个事务中,ReadCommited的多次select会生成多个ReadView,但RepeatableRead的话只复制第一个ReadView,所以不会出现幻读的问题。但:如果在RR情况下,同一个事务做了update等操作可能也会出现幻读。

MySQL事务MVCC、undolog和redolog的更多相关文章

  1. 《Mysql - 事务 MVCC》

    一:前言 - 前面通过 <Mysql 事务 - 隔离> 的学习,知道了事务的实现,是根据 获取一致性视图 来实现的. 二:那么,什么时候会获取到一致性视图呢? - 例如:有三个事务,启动的 ...

  2. MySQL 事务 MVCC 版本链

      版本链   对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(row_id并不是必要的,我们创建的表中有主键或者非NULL唯一键时都不会包含row_id列):  1) ...

  3. Mysql 数据恢复流程 基于binlog redolog undolog

    注:文中有个易混淆的地方 sql事务,即每次数据库操作生成的事务,这个事务trx_id只在undolog里存储,同时undolog维护了此事务是否完成的状态. 日志持久化事务,为了保证redolog和 ...

  4. mysql事务原理及MVCC

    mysql事务原理及MVCC 事务是数据库最为重要的机制之一,凡是使用过数据库的人,都了解数据库的事务机制,也对ACID四个 基本特性如数家珍.但是聊起事务或者ACID的底层实现原理,往往言之不详,不 ...

  5. 温故知新-Mysql锁&事务&MVCC

    文章目录 锁概述 锁分类 MyISAM 表锁 InnoDB 行锁 事务及其ACID属性 InnoDB 的行锁模式 注意 MVCC InnoDB 中的 MVCC 参考 你的鼓励也是我创作的动力 Post ...

  6. 面试官:什么是MySQL 事务与 MVCC 原理?

    作者:小林coding 图解计算机基础网站:https://xiaolincoding.com/ 大家好,我是小林. 之前写过一篇 MySQL 的 MVCC 的工作原理,最近有读者在网站上学习的时候, ...

  7. 数据库篇:mysql事务原理之MVCC视图+锁

    前言 数据库的事务特性 数据并发读写时遇到的一致性问题 mysql事务的隔离级别 MVCC的实现原理 锁和隔离级别 关注公众号,一起交流,微信搜一搜: 潜行前行 1 数据库的事务特性 原子性:同一个事 ...

  8. mysql 事务,锁,与四大隔离级别

    概念 事务 原子性:事务必须是一个自动工作的单元,要么全部执行,要么全部不执行. 一致性:事务结束的时候,所有的内部数据都是正确的. 隔离性:并发多个事务时,各个事务不干涉内部数据,处理的都是另外一个 ...

  9. 【原创】想了解Mysql事务,知道这些就够了

    Mysql事务:1. 事务进行一次数据库操作时将数据会存到BufferPoll缓存池中2. 数据存入缓存池后,Mysql会新建一个线程将数据存入到RedoLogBuffer中3. 事务提交时RedoL ...

  10. mysql事务和并发控制

    谈到事务,首先想到的问题是并发控制.比如两个用户同时操作数据库里面的一张表,一个正在读数据,一个正在删除数据,那么读数据的读出的结果究竟是多少?并发可以提高系统的性能,让多个用户同时操作一份数据,但为 ...

随机推荐

  1. 记录一次在deepin安装node版本管理工具nvm的过程

    安装nvm sudo apt-get install git -y # 安装git cd /home # 随便找个目录放代码 git clone https://github.com/nvm-sh/n ...

  2. 把pyecharts动图导入到PPT中

    如何把echarts 动图导入PPT 置顶 且听风来 2019-05-22 14:54:17 3347 收藏 6展开 首先看PPT是否开启插件,开启后 此处就有标志,然后就在你想插入的幻灯片处插入两个 ...

  3. RHEL8注册

    安装RHEL后,因为是商用系统,YUM软件仓库是不能使用的,需要注册后才可以使用.个人用户可以去红帽官网申请开发者账户. https://developers.redhat.com/ 有了开发者账户后 ...

  4. 接口测试工具POSTMAN的使用

    接口测试工具postman python ------------------------------------ 作为后端,写好了接口,我们自己要测试通过,再给别人用 --------------- ...

  5. POWER BI - 根据条件,改变数值的颜色Conditional formatting

    在visual块,右键Column选择Conditional formatting 举例,比如difference > 0 显示红色,否则<0显示绿色 如何根据 measure 写特定条件 ...

  6. STM32F0 LL库IIC第二地址配置错误

    最近在做F0项目要用到多个IIC地址,使用Cube生成的LL库,第二地址进不了中断 F0版本:1.11.0 STM32CubeX生成的LL库代码为: 1 static void MX_I2C1_Ini ...

  7. div垂直居中的4种方式方式

    一.使用单元格居中 <!DOCTYPE html> <html> <head> <title>测试</title> </head> ...

  8. Docker 使用阿里云加速拉取官方镜像

    首先登陆阿里云容器镜像服务控制台,在左侧导航栏选择镜像工具 > 镜像加速器,在镜像加速器页面获取镜像加速地址. 例如: 加速器地址:[系统分配前缀].mirror.aliyuncs.com 配置 ...

  9. ubuntu 逻辑卷增加磁盘

    使用lv* 相关的命令 lvdisplay lvscan ACTIVE            '/dev/ubuntu-vg/ubuntu-lv' [<74.00 GiB] inherit lv ...

  10. 像MIUI一样做Zabbix二次开发(1)——MIUI之于Android,乐维监控之于Zabbix

    摘要 文章主要介绍:7年做Zabbix二次开发,讲述那些从技术方向的选择,到开发.架构设计.深度定制,到我们的更多前瞻性想法. 关于MIUI "专注.极致.口碑.快"成了雷布斯的口 ...