doc: 阅读mysql undo log物理存储文档
This commit is contained in:
@@ -424,7 +424,31 @@ undo log的结构如上述所示,我们无法控制事务生成undo log的大
|
|||||||
|
|
||||||
> undo log和undo page的对应关系是灵活的,既可能一个undo log占用多个undo pages,也可能多个undo log共用相同的undo page
|
> undo log和undo page的对应关系是灵活的,既可能一个undo log占用多个undo pages,也可能多个undo log共用相同的undo page
|
||||||
|
|
||||||
|
关于undo log的物理组织方式,如下图所示:
|
||||||
|
<img src="https://yqintl.alicdn.com/4680cd1e8572e5f39310973603c43445a49ee236.png" alt="5" title="5">
|
||||||
|
|
||||||
|
##### undo segment
|
||||||
|
每当一个事务开启时,都需要持有一个undo segment,对于undo segment中磁盘空间的释放和占用(对16KB页的释放和占用)都由FSP segment进行管理。
|
||||||
|
|
||||||
|
undo segment中会至少持有一个undo page,并且,`每个undo page都会记录undo page header`。
|
||||||
|
|
||||||
|
##### undo page header
|
||||||
|
undo page header中包含如下内容:
|
||||||
|
- undo page type:undo page的类型
|
||||||
|
- last log record offset:最后一条记录的offset
|
||||||
|
- free space offset:page中空闲空间的offset
|
||||||
|
- undo page list node:指向List中的下一个undo page
|
||||||
|
|
||||||
|
undo segment中的第一个undo page除了undo page header外,`还会记录undo segment header`。
|
||||||
|
|
||||||
|
##### undo segment header
|
||||||
|
undo segment header中包含如下内容:
|
||||||
|
- state:该field记录了udno segment的状态(TRX_UNDO_CACHED/TRX_UNDO_PURGE)
|
||||||
|
- undo segment中最后一条undo record的位置
|
||||||
|
- 当前segment被分配的undo page组成的链表
|
||||||
|
|
||||||
|
##### undo log storing
|
||||||
|
undo page中的空间用于存储undo log,对于`大小较小的undo log`innodb会对undo page进行reuse,在undo page中存储多个undo logs避免浪费空间。而对于大小较大的undo log,会使用多个undo page来对该undo log进行存储。(undo page reuse只会发生在segment的第一个page)。
|
||||||
|
|
||||||
### purge
|
### purge
|
||||||
表`t`中,`a`为聚簇索引,`b`为辅助索引,若执行如下sql
|
表`t`中,`a`为聚簇索引,`b`为辅助索引,若执行如下sql
|
||||||
|
|||||||
Reference in New Issue
Block a user