MySQL架构原理之存储引擎InnoDB_Undo Log

2022/2/19 19:15:40

本文主要是介绍MySQL架构原理之存储引擎InnoDB_Undo Log,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  Undo:意为撤销或取消,以撤销操作为目的,返回某个指定状态的操作。

  Undo Log:数据库事务开始之前会将要修改的记录存放到Undo日志里,当事务回滚时或者数据库崩溃时可以利用Undo日志撤销为提交事务对数据库产生的影响。

  Undo Log产生和销毁:Undo Log在事务开始前产生;事务在提交时,并不会立刻删除undo log, innodb会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread进行回收处理。

    Undo Log 属于逻辑日志,记录一个辨别过程。例如执行一个delete,undolog会记录一个insert;执行一个update,undolog会记录一个相反的update。

  Undo Log存储:undo log采用段的方式管理和记录。在innodb数据文件中包含一种rollback segment回滚段,内部包含1024个undo log segment。可以通过下面一组参数来控制Undo log存储:

    show variables like '%innodb_undo%';

  以上对Undo Log进行了基本的介绍,下面介绍它为何存在,解决什么问题——即它的作用:

  1、实现事务的原子性

    Undo Log 是为了实现事务的原子性而出现的产物。事务处理过程中,如果出现了错误或者用户执行了 ROLLBACK 语句,MySQL 可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。
  2、实现多版本并发控制(MVCC)

    Undo Log 在 MySQL InnoDB 存储引擎中用来实现多版本并发控制。事务未提交之前,Undo Log保存了未提交之前的版本数据,Undo Log 中的数据可作为数据旧版本快照供其他并发事务进行快照读。

        

    1)事务A手动开启事务,执行更新操作,首先会把更新命中的数据备份到 Undo Buffer 中。

    2)事务B手动开启事务,执行查询操作,会读取 Undo 日志数据返回,进行快照读








                                                                       

  

 



这篇关于MySQL架构原理之存储引擎InnoDB_Undo Log的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程