一 Undo Log的作用
1 事务回滚
2 MVCC(Multi-Versioin Concurrency Control)
二 什么样的Undo Log
三 Undo Record中的内容
1 Insert类型的Undo Record

2 Update类型的Undo Record
Transaction Id记录了产生这个历史版本事务Id,用作后续MVCC中的版本可见性判断
Rollptr指向的是该记录的上一个版本的位置,包括space number,page number和page内的offset。沿着Rollptr可以找到一个Record的所有历史版本。
Update Fields中记录的就是当前这个Record版本相对于其之后的一次修改的Delta信息,包括所有被修改的Field的编号,长度和历史值。
四 Undo Record的组织方式
1 逻辑组织方式 - Undo Log
2 物理组织格式 - Undo Segment
3 文件组织方式 - Undo Tablespace
4 内存组织结构
五 Undo的写入
六 Undo for Rollback
七 Undo for MVCC
八 Undo for Crash Recovery
九 Undo的清理
1 扫描一批要清理Undo Records
[trx_purge_choose_next_log] Pop T1 from purge_queue;
[trx_purge_get_next_rec] Iterator T1;
[trx_purge_rseg_get_next_history_log] Get T1 next: T5;
[trx_purge_choose_next_log] Push T5 into purge_queue;
[trx_purge_choose_next_log] Pop T4 from purge_queue;
[trx_purge_get_next_rec] Iterator T4;
[trx_purge_rseg_get_next_history_log] Get T4 next: ...;
[trx_purge_choose_next_log] Push ... into purge_queue;
[trx_purge_choose_next_log] Pop T5 from purge_queue;
[trx_purge_get_next_rec] Iterator T5;
[trx_purge_rseg_get_next_history_log] Get T5 next: T6;
[trx_purge_choose_next_log] Push T6 into purge_queue;
......
TRX_UNDO_DEL_MARK_REC类型Undo Record对应的Record的真正删除,称为Undo Purge;
以及Undo Record本身从旧到新的删除,称为Undo Truncate。
Undo Tablespace的重建缩小,称为Undo Tablespace Truncate