小編給大家分享一下MySQL innodb double write概念是什么,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
十多年的禹會網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都營銷網站建設的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整禹會建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。成都創新互聯從事“禹會網站設計”,“禹會網站推廣”以來,每個客戶項目都認真落實執行。
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概念是什么”有了一定的了解,如果想了解更多相關知識,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!
文章標題:mysqlinnodbdoublewrite概念是什么
當前URL:http://www.yijiale78.com/article2/pcspoc.html
成都網站建設公司_創新互聯,為您提供網站改版、動態網站、網站排名、網站設計、網站策劃、品牌網站設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯