您好,登錄后才能下訂單哦!
小編給大家分享一下mysql innodb double write概念是什么,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
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)。
看完了這篇文章,相信你對“mysql innodb double write概念是什么”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。