美文网首页
事务原子性保证的基础--undo log

事务原子性保证的基础--undo log

作者: wbpailxt | 来源:发表于2020-03-08 18:26 被阅读0次
compact行格式
数据记录和undo log记录的关系
insert操作对应的undo log记录

当我们向某个表中插入一条记录时,实际上需要向聚簇索引和所有的二级索引都插入一条记录。不过记录undo日志时,我们只需要考虑向聚簇索引插入记录时的情况就好了,因为其实聚簇索引记录和二级索引记录是一一对应的,我们在回滚插入操作时,只需要知道这条记录的主键信息,然后根据主键信息做对应的删除操作,做删除操作时就会顺带着把所有二级索引中相应的记录也删除掉。后边说到的DELETE操作和UPDATE操作对应的undo日志也都是针对聚簇索引记录而言的,我们之后就不强调了。

实际上insert undo只在事务回滚时起作用,当事务提交后,该类型的undo日志就没用了,它占用的Undo Log Segment也会被系统回收(也就是该undo日志占用的Undo页面链表要么被重用,要么被释放)。虽然真正的insert undo日志占用的存储空间被释放了,但是roll_pointer的值并不会被清除,roll_pointer属性占用7个字节,第一个比特位就标记着它指向的undo日志的类型,如果该比特位的值为1时,就代表着它指向的undo日志类型为insert undo。


事务中执行dellete语句到事务提交对对应记录的改动(也就是是怎么进行删除的)

delete mark阶段:正常记录转变成中间状态记录

delete mark阶段这个中间状态主要是为了实现一个称之为MVCC的功能

purge阶段:当该删除语句所在的事务提交之后,会有专门的线程后来真正的把记录删除掉

在删除语句所在的事务提交之前,只会经历阶段一,也就是delete mark阶段(提交之后我们就不用回滚了,所以只需考虑对删除操作的阶段一做的影响进行回滚)。

delete mark阶段之前会生成undo日志。


TRX_UNDO_DEL_MARK_REC类型的undo日志结构

delete操作对应undo log记录

在对一条记录进行delete mark操作前,需要把该记录的旧的trx_id和roll_pointer隐藏列的值都给记到对应的undo日志中来,就是我们图中显示的old trx_id和old roll_pointer属性。

数据记录执行删除操作后的版本链

根据TRX_UNDO_DEL_MARK_REC类型的undo日志进行回滚

//todo 这里画一个版本链的图:一条记录被事务10修改了,并且事务10提交了,删除事务20才得以进行,并且是怎么根据版本链进行rollback的。


更新操作

数据记录在进行update时的步骤.png

对记录进行更新操作的一个例子

版本链变化过程.jpg

相关文章

  • redo undo 详解

    redo log称为重做日志,用来保证事务的原子性和持久性。undo log用来保证事务的一致性。redo恢复提交...

  • 事务原子性保证的基础--undo log

    insert操作对应的undo log记录当我们向某个表中插入一条记录时,实际上需要向聚簇索引和所有的二级索引都插...

  • ACID靠什么保证

    A:原子性由undo log来保证,undo log记录事务需要回滚的日志信息,需要回滚是,取消已经执行成功的sq...

  • MySQL Redo Undo MVCC

    1、undo保证事务的原子性(回滚) A、BeginB、记录A=1到undo log中C、修改记录A=3D、记录B...

  • Innodb中的undo log

    Innodb实现事务的原子性时,使用的是undo log,当事务失败时,就使用undo log回滚事务的修改。 使...

  • undo log为什么需要持久化?

    undo log用来实现事务的原子性,保障事务出现错误的时候,数据恢复到开始的状态 问题 为什么undo log需...

  • mysql 里面的日志

    一.Undo log : 事务原子性实现原理,当一个事务,某个地方出错了,或者进行了回滚,就要用到Undo log...

  • 69-MySQL-事务日志

    一、事务4大特性 1.1、原子性 事务的原子性由事务的 redo 日志和undo 日志来保证 1.2、一致性 事务...

  • mysql 面试整理

    MySQL 事务特点,事务类型? 事务的特点:原子性:要么执行成功要么执行失败。实现主要是以undo log隔离性...

  • 关于redo 和 undo log

    InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以...

网友评论

      本文标题:事务原子性保证的基础--undo log

      本文链接:https://www.haomeiwen.com/subject/xllrrhtx.html