DB concept 恢复系统

aries
减少恢复时间
减少检查点开销
避免重做日志冗余重做
减少日质量

LSN:日志序列号,标识操作在页上实施
物理逻辑redo,物理上标识受影响的页,页内逻辑
脏页表:内存已更新,未刷盘,减少恢复时不必要的重做
模糊检查点:记录脏页与相关信息,不在检查点将脏页写入,后台持续刷新

数据结构:
LSN:唯一标示记录,文件号+偏移量
PageLSN:每个页维护,记录发生在该页的更新操作LSN,恢复阶段LSN小于该记录的日志将不执行,作为检查点的一部分,
磁盘上部分更新时,物理逻辑操作无法重做——缓冲页锁:更新完成(事务),且更新日志写入,释放锁(是否刷新?)
日志记录包含前一日志LSN:PreLSN
补偿日志记录:CLR:事务回滚中产生,read-only。abort日志记录作用。UndoNextLsn:回滚时下一个需要Undo的日志LSN(跳过已回滚的日志)
脏页表:缓冲区中已更新的页列表,每页:PageLSN(当前) RecLSN(初始)。写入磁盘移除
检查点日志记录:列表Of脏页 活动事务(LastLsn)

恢复算法:
分析:脏的页,要撤销的事务,重做起始LSN
redo:重做事务
undo:回滚事务

分析:找到最后的完整检查点日志记录,读入脏页表,
脏页表中最小RecLSN:RedoLSN
事务列表作为undo-list(每个事务最后LSN)
发现事务:加入undo-list,找到end删除事务
发现修改页:加入脏页表,页的RecLSN为事务LSN(起始?)

重做:
发现日志,页不在脏页表 || LSN<脏页表RecLSN,跳过
否则,调出页,页PageLSN<日志LSN,重做日志

撤销与回滚:undo-list日志记录检查,依次执行MaxLSN,读PreLSN

posted @ 2020-12-10 13:43  qmchao  阅读(114)  评论(0)    收藏  举报