mysql innodb double write概念彙總

chenfeng發表於2019-01-04

double write原理圖如下:






通過引入doublewrite buffer的方案,每次innodb在準備寫出一個page時,先把page寫到doublewrite buffer中.如果在寫doublewrite buffer時,發生了意外,但是資料檔案中的原來的page不受影響,這樣在下次啟動時,可以通過innodb的redolog進行恢復.如果在寫doublewrite buffer成功後,mysql會把doublewrite buffer的內容寫到資料檔案中,如果在這個過程又出現了

意外,沒有關係,重啟後mysql可以通過從doublewrite buffer找到好的page,再用該好的page去覆蓋磁碟上壞的page即可。

所以在正常的情況下,mysql寫資料page時,會寫兩遍到磁碟上,第一遍是寫到doublewrite buffer,第二遍是從doublewrite buffer寫到真正的資料檔案中.


為了解決 partial page write問題 ,當mysql將髒資料flush到data file的時候,先使用memcopy將髒資料複製到記憶體中的double write buffer,通過double write buffer再分2次,每次寫入1MB到共享表空間,然後馬上呼叫fsync函式,同步到磁碟上,避免緩衝帶來的問題。


兩次寫需要額外新增兩個部分:


1)記憶體中的兩次寫緩衝(doublewrite buffer),大小為2MB

2)磁碟上共享表空間中連續的128頁,大小也為2MB。其中120個用於批量寫髒頁,另外8個用於Single Page Flush。做區分的原因是批量刷髒是後臺執行緒做的,不影響前臺執行緒。而Single page flush是使用者執行緒發起的,需要儘快的刷髒頁並替換出一個空閒頁出來。


相關引數解釋:

(root@localhost)-[11:35:25]-[(none)]>show status like "%InnoDB_dblwr%";

+----------------------------+-----------+

| Variable_name              | Value     |

+----------------------------+-----------+

| Innodb_dblwr_pages_written | 882384812 |

| Innodb_dblwr_writes        | 61236457  |

+----------------------------+-----------+

2 rows in set (0.01 sec)


InnoDB_dblwr_pages_written   doublewrite寫的頁的總數

InnoDB_dblwr_writes          doublewrite寫的檔案的次數


因為髒頁重新整理到磁碟的寫入單元小於單個頁的大小,如果在寫入過程中資料庫突然當機,可能會使資料頁的寫入不完成,

造成資料頁的損壞。而redo log中記錄的是對頁的物理操作,如果資料頁損壞了,通過redo log也無法進行恢復。

所以為了保證資料頁的寫入安全,引入了double write。double write的實現分兩個部分,一個是緩衝池中2M的記憶體塊

大小,一個是共享表空間中連續的128個頁,大小是2M。髒頁從flush list重新整理時,並不是直接重新整理到磁碟而是先呼叫

函式(memcpy),將髒頁拷貝到double write buffer中,然後再分兩次,每次1M將double write buffer 重新整理到

磁碟double write 區,之後再呼叫fsync操作,同步到磁碟。

如果是寫doublewrite buffer本身失敗,那麼這些資料不會被寫到磁碟,innodb此時會從磁碟載入原始的資料,然後通過innodb的事務日誌來計算出正確的資料,重新 寫入到doublewrite buffer。

如果應用在業務高峰期, innodb_dblwr_pages_written:innodb_dblwr_writes遠小於64:1,則說明,系統寫入壓力不大。

雖然,double write buffer重新整理到磁碟的時候是順序寫,但還是是有效能損耗的。

如果系統本身支援頁的安全性保障(部分寫失效防範機制),如ZFS,那麼就可以禁用掉該特性(skip_innodb_doublewrite)。



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

相關文章