一、事务日志(Transaction Log)
1、目的
用于保证DataBase的A、C、D特性:故障恢复的基础。
Transaction Log刷盘与事务提交关联,数据刷盘与Checkpoint机制关联。
| Transaction T1 | Log | Comment |
|---|---|---|
| 事务开始:⟨T1, start⟩ | ||
| read(A, t); t←t×2; | ||
| write(A, t) | ⟨T1, A, 16⟩ | A’s new value is 16 |
| read(B, t); t←t×2; | ||
| write(B, t) | ⟨T1, B, 16⟩ | B’s new value is 16 |
| 事务提交(TL刷盘):⟨T1, commit⟩ | Transaction Log此时已经刷盘: 由当前事务刷盘,或由Transaction-Group中的其他Transaction顺带刷盘 |
|
| output(A) | ||
| output(B) | 数据刷盘:Checkpoint第二步 | Data Page此时已经刷盘: 由当前事务刷盘,或由Transaction group中的其他Transaction顺带刷盘 |
| 事务结束:⟨T1, end⟩ |
事务提交包含两个阶段:修改内存中事务对应的信息,并将写入事务日志缓冲:undo log buffer、redo log buffer。
2、性质
(1)WAL(write-ahead-logging):Transaction Log日志刷盘先于数据刷盘;
(2)FLAC(force-log-at-commit):事务提交⟨Ti,commit⟩ 时,必须先将Transaction Log日志刷盘;
(3)数据刷盘可先于事务提交,也可后于事务提交;
3、日志分类
(1) Redo Log
- 物理日志:数据页
- 幂等
(2) Undo Log
- 逻辑日志:行记录
- 非幂等
二、其他日志
1、bin log
binlog 可以用来归档,也可以用来做主备同步
