Mysql

什麼是 InnoDB 頁面校驗和?

  • April 22, 2017

InnoDBPage checksum到底是什麼?是否Page checksum僅在寫入或讀取頁面/塊時檢測到底層儲存的問題?

(我想這就是你要問的。)

InnoDB“塊”為 16KB。但大多數磁碟子系統以較小的單位工作——4KB 或 512 字節。為了使 InnoDB 數據保持完整,磁碟需要將所有 16KB 作為一個單元寫入——要麼全部寫入,要麼不寫入。可能發生的情況是 16KB 的片段一個接一個地寫入,並且中途斷電。這會導致“撕裂頁面”(“頁面”指的是 16KB 塊)。

為了從損壞的頁面中恢復,InnoDB 做了兩件事。它對每個塊進行校驗和以發現它,並使用“雙重寫入”進行恢復。該塊(或至少某些關鍵塊)被寫入兩次 - 寫入某個相對恆定的位置,然後寫入磁碟上的所需位置(在數據或索引中)。

從崩潰中恢復時,會檢查“雙寫緩衝區”是否導致“頁面撕裂”;在這種情況下,它會被修復。

顧名思義,雙重寫入成本很高。(我沒有衡量成本有多高;我懷疑成本在很大程度上取決於 HDD 與 SSD 和 RAID 控制器。)關閉它是一種提高速度的方法,但有風險。FusionIO 是(已被收購)唯一保證 16KB 原子寫入的驅動器製造商;我希望其他人已經添加了這個功能。

具有電池支持寫入記憶體的 RAID 應該使雙寫入幾乎為零成本。

不同的校驗和… Percona 工具包使用“校驗和”來儲存數據。由於行在主從之間的佈局不一定相同,因此對文件進行校驗和對於查看**表是否匹配沒有用處。我懷疑它涉及以可重複的順序讀取行,並對每行或行塊進行校驗和。

“rsync”做類似的事情,但在文件級別。

引用自:https://dba.stackexchange.com/questions/171708