doc: 阅读innodb undo log文档
This commit is contained in:
22
mysql/mysql底层/Undo logging and History System.md
Normal file
22
mysql/mysql底层/Undo logging and History System.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user