7.2 事务的实现

redo log :保证事务的原子性和持久性

  • 恢复提交事务修改的页操作
  • 物理日志,记录的是页的物理修改操作

undo log:保证事务的一致性

  • undo回滚行记录到某个特定版本
  • 逻辑日志,根据每行记录进行记录

7.2.1 redo

1.基本概念

重做日志用来实现事务的持久性,由两部分组成:

一是内存中的重做日志缓冲,其是易失的;

二是重做日志文件,其是持久的。

7.2.2 undo

1.基本概念

重做日志记录了事务的行为,可以很好地通过对页进行“重做”。但是事务有时还需要进行回滚操作,这是就需undo。

2.undo存储管理

  • innodb_undo_directory

    • 设置rollback segment文件所在的路径。
  • innodb_undo_logs

    • 设置rollback segment的个数,默认值128
  • innodb_undo_tablespaces

    • 设置构成rollback segment文件的数量

当事务提交时,InnoDB存储引擎会做两件事情:

  • 将undo log放入列表中,以供之后的purge操作
  • 判断undo log 所在的页是否可以重用,若可以分配给下格事务使用

3.undo log格式

undo log分为:

  • insert undo log
    • insert操作产生的undo log,只对事务本身可见,对其他事务不可见,该undo log可以在事务提交后直接删除。
  • update undo log
    • delete和update操作产生的undo log。需要提供MVCC机制,不能在十五提交时就进行删除。

4.查看undo信息