Undo Log

1. Undo Log 介绍

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

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

  • Undo Log产生和销毁:Undo Log 在事务开始前产生;事务在提交时,并不会立刻删除 undo loginnodb 会将该事务对应的 undo log 放入到删除列表中,后面会通过后台线程 purge thread 进行回收处理。Undo Log 属于逻辑日志,记录一个变化过程。例如:执行一个 deleteundolog会记录一个 insert;执行一个 updateundolog 会记录一个相反的update

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

SHOW VARIABLES LIKE '%innodb_undo%';

2. Undo Log 作用

  • 实现事务的原子性
    Undo Log 是为了实现事务的原子性而出现的产物。事务处理过程中,如果出现了错误或者用户执行了 ROLL BACK 语句,MySQL可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。
  • 实现多版本并发控制(MVCC
    Undo LogMySQL InnoDB 存储引擎中用来实现多版本并发控制。事务未提交之前,Undo Log 保存了未提交之前的版本数据,Undo Log 中的数据可作为数据旧版本快照供其他并发事务进行快照读。
  1. 事务A手动开启事务,执行更新操作,首先会把更新命中的数据备份到 Undo Buffer
  2. 事务B手动开启事务,执行查询操作,会读取 Undo 日志数据返回,进行快照读
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容