中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql innodb double write概念是什么

發布時間:2021-11-08 09:14:44 來源:億速云 閱讀:125 作者:小新 欄目:MySQL數據庫

小編給大家分享一下mysql innodb double write概念是什么,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

double write原理圖如下:

mysql innodb 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概念是什么”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平安县| 平阴县| 南宫市| 永顺县| 中宁县| 轮台县| 于田县| 会东县| 泸西县| 临清市| 南安市| 杭锦后旗| 灵丘县| 年辖:市辖区| 普格县| 长宁区| 安塞县| 南安市| 耒阳市| 丰县| 滨州市| 碌曲县| 卢湾区| 安顺市| 阿拉尔市| 鸡西市| 句容市| 庆安县| 宜昌市| 澄迈县| 吉首市| 谷城县| 洪泽县| 岢岚县| 霍城县| 张掖市| 博白县| 宜阳县| 阜城县| 呈贡县| 莒南县|