CMU15445 Lecture 20 Logging Schemes


Crash Recovery

recovery algorithm 需要做两件事情:

  • txn 正常执行时的额外工作,以保证DBMS能够recover from failure
  • failure之后的recover action,以此来保证原子性,一致性,可持久性

Failure Classification

dram每个2ms要刷新一次防止数据丢失 而sram是静态的 不需要刷新 效率必须高。SRAM——“Static RAM(静态随机存储器)”的简称,所谓“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。


存储器分级

TRANSACTION FAILURES

SYSTEM FAILURES

STORAGE MEDIA FAILURE

磁盘本身坏了,难以处理,一般只有备份才行

DBMS为了性能需要先把page放在buffer pool,另外,DBMS需要保证committed的数据是durable,也需要保证aborted的txn不是durable,这其中的存在着性能与安全的权衡。一般有两种操作去实现txn的安全性

Buffer Pool Management Policies

steal and no-steal

steal police表明可以把uncommited的数据刷入disk

force and no-force

force police决定在commit的时候强制将updates made by a txn刷到disk上

no-steal and force

既不需要redo 也不需要undo
但是需要大量的使用memeory

Shadow Paging

Shadow Paging使用了no-steal and force做法,但有些不同,undo的时候需要清理shadow page
每次update shadow page都需要去将该page写入磁盘

disadvantage

copy paths是啥?修改内存中的Database root和磁盘中的database root,修改其中导向leaf node的path

non-contiguous?每次upate shadow page时会随机write

Write-Ahead Logging

采取steal + no-force方案
维持log文件,write ahead log表示在真正的把update的数据刷到disk之前,先写log
一般而言,buffer pool中会有特定的区域来存放log

必须保证在commit的时候,所有的log都被刷到disk中。

DBMS会在log中分别在txn开始和完成时,写上

log information包含了:

wal实际操作中是一同修改wal buffer与update page

implementation

使用group commit去优化log的batch flushes,也就是txn需要commit的时候,使其“卡住”,等到多个txn可以commit的时候一起flush到disk

Logging Schemes

log record的内容可以是

Physical Logging

MySQL把undo log与redo log分开。单独的undo log可以用于回退数据的上一个版本,实现mvcc的delta page,当然还可以用来实现undo操作
记录实际变化
缺点是数据量可能会很大

Logical Logging

记录SQL语句
如果SQL中包含时间函数,可能再次执行SQL时会出错;如果有limit谓词,那么再次执行SQL的结果可能会不一致;在数据库备份的时候,备份数据库可能不存在主库中的索引,那么SQL再次执行的时候会出错?

Physiological Logging:

MySQL一般用的这个
还是基于Physical Logging,但是不同之处是log的specific location记录的是slot number?


其他

mixed logging,分析SQL的内容是否会重现出错,如果不会就记录SQL queries

checkpoints

注意,checkpoint之前commit的txn一定会被刷到disk
checkpoint可以优化 steal and no-force的recover所花费的时间。
log file如果过大,那么recover的时间就很长,checkpoints用于记录已经被flush到磁盘的内存数据,checkpoint之前的update已经全部写到disk了

challenges

  • 做checkpoint的时候需要花费时间,txn这时候会卡住?这个chckpoint是指花费时间是指讲这个checkpoint写到disk会费时间吗
  • 在recover的时候,需要去扫描判断,找到checkpoint之前没有commit的txn需要耗费时间
  • 多久做一次checkpoint的记录呢?
    • checkpoint记录过于频繁,性能损耗严重
    • checkpoint记录时间间隔大,recover时间长

Blocking Checkpoint Implementation:

这种checkpoint的实现,在recover时,不需要扫描checkpoint之前未commit的txn