1谬擦、undo保證事務(wù)的原子性(回滾)
A、Begin
B趾徽、記錄A=1到undo log中
C续滋、修改記錄A=3
D、記錄B=1到undo log中
E孵奶、修改記錄B=2
F疲酌、寫入undo log到磁盤中
G、寫入數(shù)據(jù)到磁盤中
H了袁、Commit
A-E步驟都是在內(nèi)存中完成
A-F之間如果出現(xiàn)問題朗恳,由于undo log和數(shù)據(jù)都未寫入磁盤,所以直接回滾
F之后出現(xiàn)問題载绿,由于undo log已經(jīng)落盤粥诫,可以利用undo log回滾
缺點(diǎn):
每次數(shù)據(jù)庫的修改都必須將數(shù)據(jù)以同步的方式寫入磁盤
數(shù)據(jù)寫入磁盤屬于隨機(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寫入磁盤
I跌帐、Commit
不需要實(shí)時(shí)以同步的方式將數(shù)據(jù)寫入磁盤首懈,數(shù)據(jù)可以后臺(tái)異步寫入磁盤
redo log寫入磁盤是順序IO?
undo log也寫入到redo log中
redo 緩存刷盤規(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猜拾,將臟頁刷盤
重做日志不夠用時(shí),刷新磁盤
刷臟頁的時(shí)候不會(huì)阻塞佣盒,但是期間修改數(shù)據(jù)的操作的頁也會(huì)記錄LSN挎袜,恢復(fù)時(shí)將與redo中的LSN進(jìn)行比較判斷,避免了重復(fù)操作
4肥惭、LSN(日志序列號(hào))
代表著重做日志的寫入總量盯仪,寫入redo多少,就單調(diào)遞增多少
同時(shí)也代表著checkpoint的位置
還代表著頁的版本(數(shù)據(jù)頁上面也有LSN號(hào)蜜葱,通過與redo的LSN比較決定是否需要進(jìn)行數(shù)據(jù)恢復(fù))
5全景、實(shí)例恢復(fù)
? ? ?
commit到commit ok之間(prepare階段)需要先寫binlog(主從),否則有可能因?yàn)閎inlog寫失敗影響主從
先恢復(fù)已提交完成事務(wù)——>未commit事務(wù)進(jìn)行回滾——>對(duì)于prepare(已commit未OK)事務(wù)牵囤,如果已經(jīng)寫binlog則提交爸黄,否則回滾
6、MVCC
解決讀寫間阻塞的問題