1.7 KiB
1.7 KiB
Undo logging and History System
innodb存储引擎实现了多版本并发控制(MVCC),故而不同用户在访问数据时,会读取到数据不同版本的快照(取决于事务的隔离级别)。
通过MVCC,其为用户提供了一致的视图。undo logging和history system则是实现mvcc的底层机制。
当innodb修改时,会保存备份
在innodb针对mvcc的实现中,如果某一条记录发生了修改,那么当前记录的修改前版本将会作为undo record被记录到undo log中。
通过undo log,用户能够将修改后的数据还原到修改前的版本。
对于innodb中的记录,每条记录都会包含其most recent undo record的引用,引用被称为rollback pointer或ROLL_PTR。并且,每条undo record还包含指向其前一条undo record的引用(init record insert除外)。
综上所述,每条记录都包含一个记录了all versions of record的undo record chain。故而,可以通过undo record chain构建记录的所有先前版本数据。
Global history and purge operations
每条记录都可以通过undo record chain还原到先前的版本,除此之外,在整个数据库层面还有一个全局的history view,该history view被称之为history list。当每个事务被提交时,事务关联的history将会被链接到global history list中,history顺序按照事务提交顺序。history list主要用用于数据的清理。
innodb会运行一个连续的清理process,其主要负责如下内容:
- 对
delete-marked records进行实际删除 - 释放undo log page,并且将其从history list中移除,使得其可以被reuse