MySQL double write存在意義
背景:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL double writeMySql
- 【MySQL】八、double write 淺析.MySql
- mysql innodb double write概念彙總MySql
- MySQL的Double Write並不難理解MySql
- 敲黑板:InnoDB的Double Write,你必須知道
- 服務網格的存在意義 -kelseyhightower
- MySQL自定義函式與儲存過程MySql函式儲存過程
- MySQL:MGR 學習(1):寫集合(Write set)MySql
- MySQL死鎖案例 – Learn. Write. Repeat.MySql
- 【MySQL】ERROR 1878 (HY000): Temporary file write failure.MySqlErrorAI
- MYSQL報1022錯誤:Can't write;duplicate key in table '.....'MySql
- MySQL 字串轉double轉換棧幀(可能丟失精度)MySql字串
- MySQL儲存MySql
- mysql 儲存過程中變數的定義與賦值操作MySql儲存過程變數賦值
- 深入mysql建立自定義函式與儲存過程的詳解MySql函式儲存過程
- double 函式函式
- [Javascript] Write .call()JavaScript
- MongoDB Write ConcernMongoDB
- hio_write
- MySQL:MGR 學習(2):Write set(寫集合)的寫入過程MySql
- MySQL升級WRITE_SET後的一次死鎖分析MySql
- MySQL 儲存引擎MySql儲存引擎
- MySQL儲存引擎MySql儲存引擎
- MySQL自定義排序MySql排序
- “21天教你學會C++”,不要太在意~C++
- HBO新劇《切爾諾貝利》的大火, 再次確認了工業機器人的存在意義機器人
- MySQL系列-儲存引擎MySql儲存引擎
- MySQL儲存 emoji 表情MySql
- mysql 儲存過程MySql儲存過程
- MySQL InnoDB儲存引擎MySql儲存引擎
- mysql 儲存emoji表情MySql
- mysql 轉義問題MySql
- ByteCTF2021 double sqliTF2SQL
- MongoDB 寫安全(Write Concern)MongoDB
- How boltdb Write its Data?
- ALi CTF 2015 write up
- 什麼是庫存?什麼是零庫存?庫存的定義
- MySQL-05.儲存引擎MySql儲存引擎