1、undo保證事務(wù)的原子性(回滾)
A、Begin
B、記錄A=1到undo log中
C、修改記錄A=3
D、記錄B=1到undo log中
E、修改記錄B=2
F、寫(xiě)入undo log到磁盤(pán)中
G、寫(xiě)入數(shù)據(jù)到磁盤(pán)中
H、Commit
A-E步驟都是在內(nèi)存中完成
A-F之間如果出現(xiàn)問(wèn)題,由于undo log和數(shù)據(jù)都未寫(xiě)入磁盤(pán),所以直接回滾
F之后出現(xiàn)問(wèn)題,由于undo log已經(jīng)落盤(pán),可以利用undo log回滾
缺點(diǎn):
每次數(shù)據(jù)庫(kù)的修改都必須將數(shù)據(jù)以同步的方式寫(xiě)入磁盤(pán)
數(shù)據(jù)寫(xiě)入磁盤(pán)屬于隨機(jī)IO,性能方面較差
2、undo+redo
A、Begin
B、記錄A=1到undo log中
C、修改記錄A=3
D、記錄修改日志到redo log中
E、記錄B=1到undo log中
F、修改記錄B=2
G、記錄修改日志到redo log中
H、將redo log寫(xiě)入磁盤(pán)
I、Commit
不需要實(shí)時(shí)以同步的方式將數(shù)據(jù)寫(xiě)入磁盤(pán),數(shù)據(jù)可以后臺(tái)異步寫(xiě)入磁盤(pán)
redo log寫(xiě)入磁盤(pán)是順序IO?
undo log也寫(xiě)入到redo log中
redo 緩存刷盤(pán)規(guī)則:
事務(wù)提交時(shí)
當(dāng)log buffer 中一半的內(nèi)存空間已經(jīng)被使用時(shí)
log checkpoint時(shí)
3、check point
check point機(jī)制是為了減少實(shí)例恢復(fù)的時(shí)間
緩沖池不夠用時(shí),觸發(fā)checkpoint,將臟頁(yè)刷盤(pán)
重做日志不夠用時(shí),刷新磁盤(pán)

刷臟頁(yè)的時(shí)候不會(huì)阻塞,但是期間修改數(shù)據(jù)的操作的頁(yè)也會(huì)記錄LSN,恢復(fù)時(shí)將與redo中的LSN進(jìn)行比較判斷,避免了重復(fù)操作
4、LSN(日志序列號(hào))
代表著重做日志的寫(xiě)入總量,寫(xiě)入redo多少,就單調(diào)遞增多少
同時(shí)也代表著checkpoint的位置
還代表著頁(yè)的版本(數(shù)據(jù)頁(yè)上面也有LSN號(hào),通過(guò)與redo的LSN比較決定是否需要進(jìn)行數(shù)據(jù)恢復(fù))
5、實(shí)例恢復(fù)
? ? ?

commit到commit ok之間(prepare階段)需要先寫(xiě)binlog(主從),否則有可能因?yàn)閎inlog寫(xiě)失敗影響主從
先恢復(fù)已提交完成事務(wù)——>未commit事務(wù)進(jìn)行回滾——>對(duì)于prepare(已commit未OK)事務(wù),如果已經(jīng)寫(xiě)binlog則提交,否則回滾
6、MVCC
解決讀寫(xiě)間阻塞的問(wèn)題

