首页 > 数据库 >MySQL事务MVCC、undolog和redolog

MySQL事务MVCC、undolog和redolog

时间:2022-08-23 14:34:08浏览次数:59  
标签:事务 redolog undolog trx MVCC 当前 ReadView id select

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等操作可能也会出现幻读。

 

标签:事务,redolog,undolog,trx,MVCC,当前,ReadView,id,select
From: https://www.cnblogs.com/xin-xing/p/16615395.html

相关文章

  • mysql6/视图/触发器/事务/四种隔离级别/事务日志/mvcc/内置函数/存储过程/索引/索引的
    视图触发器事务事务处理四种隔离级别事务日志MVCC内置函数存储过程索引索引的意义慢查询优化查询索引模拟视图1.什么是视图?视图是类似于临时表,由sql......
  • MVCC
    原理总体上来讲MVCC的实现是基于ReadView版本链以及Undo日志实现的MVCC就是在使用READCOMMITTD、REPEATABLEREAD这两种隔离级别的事务在执行普通的SELECT操作时访问记......
  • mysql MVCC中高水位先的trx_id
    读《mysql45讲》之后的总结 InnoDB为每个事务构造了一个数组,用来保存这个事务启动瞬间,当前正在“活跃”的所有事务ID。“活跃”指的就是,启动了但还没提交数组里面事......
  • 【面试】【2】谈谈对MVCC的理解
    1、MVCC是什么?MVCC是为了解决事务操作中多线程并发安全问题的无锁并发控制技术,它的全称是Multi-VersionConcurrencyControl,多版本并发控制,简称MVCC。 2、事务操作中......