MySQL double write存在意義

guocun09發表於2020-04-10

背景:

MySQL預設每個page size是16k,而OS通常最小I/O單元是4k,所以如果寫page時可能需要呼叫4次OS I/O才能完成。假定在執行兩次時DB crash了,這時page只寫了一部分,就產生了partial write(不完整寫)。

MySQL double write的設定就是為了在發生partial write時任然保證已經commit的資料不丟失,以及資料檔案不損壞。


疑惑:

MySQL double write很多文章中有介紹,但理解過程中有一些問題:

既然寫double write buffer也是寫硬碟ibdata1檔案,這塊和直接寫.ibd 檔案又有什麼區別?
寫double write buffer 也是寫16k page 也可能出現分裂情況吧?
只是因為寫double write buffer是順序寫速度快一些?


解疑:

其實MySQL double write主要存在機制是在恢復時:

1> .ibd資料檔案page在發生partial write不完整寫時可以從double write檔案恢復

2> double write檔案page損壞時,因為此時.ibd資料檔案沒有被修改,可以直接利用已經commit的redo恢復前滾

3>  redo page會發生partial write嗎?redo page大小是512位元組小於4k os最小io不會存在partial write問題


以上,想想如果沒有double write機制,僅僅只存在.ibd檔案,直接寫在partial write不完整寫時就沒有地方可恢復的了。


附圖:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25583515/viewspace-2685493/,如需轉載,請註明出處,否則將追究法律責任。

相關文章