mysqlinnodbdoublewrite概念是什么

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

十多年的禹會網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整禹會建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“禹會網(wǎng)站設(shè)計”,“禹會網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

double write原理圖如下:

mysql innodb double write概念是什么

通過引入doublewrite buffer的方案,每次innodb在準備寫出一個page時,先把page寫到doublewrite buffer中.如果在寫doublewrite buffer時,發(fā)生了意外,但是數(shù)據(jù)文件中的原來的page不受影響,這樣在下次啟動時,可以通過innodb的redolog進行恢復(fù).如果在寫doublewrite buffer成功后,mysql會把doublewrite buffer的內(nèi)容寫到數(shù)據(jù)文件中,如果在這個過程又出現(xiàn)了

意外,沒有關(guān)系,重啟后mysql可以通過從doublewrite buffer找到好的page,再用該好的page去覆蓋磁盤上壞的page即可。

所以在正常的情況下,mysql寫數(shù)據(jù)page時,會寫兩遍到磁盤上,第一遍是寫到doublewrite buffer,第二遍是從doublewrite buffer寫到真正的數(shù)據(jù)文件中.

為了解決 partial page write問題 ,當(dāng)mysql將臟數(shù)據(jù)flush到data file的時候,先使用memcopy將臟數(shù)據(jù)復(fù)制到內(nèi)存中的double write buffer,通過double write buffer再分2次,每次寫入1MB到共享表空間,然后馬上調(diào)用fsync函數(shù),同步到磁盤上,避免緩沖帶來的問題。

兩次寫需要額外添加兩個部分:

1)內(nèi)存中的兩次寫緩沖(doublewrite buffer),大小為2MB

2)磁盤上共享表空間中連續(xù)的128頁,大小也為2MB。其中120個用于批量寫臟頁,另外8個用于Single Page Flush。做區(qū)分的原因是批量刷臟是后臺線程做的,不影響前臺線程。而Single page flush是用戶線程發(fā)起的,需要盡快的刷臟頁并替換出一個空閑頁出來。

相關(guān)參數(shù)解釋:

(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寫的頁的總數(shù)

InnoDB_dblwr_writes          doublewrite寫的文件的次數(shù)

因為臟頁刷新到磁盤的寫入單元小于單個頁的大小,如果在寫入過程中數(shù)據(jù)庫突然宕機,可能會使數(shù)據(jù)頁的寫入不完成,

造成數(shù)據(jù)頁的損壞。而redo log中記錄的是對頁的物理操作,如果數(shù)據(jù)頁損壞了,通過redo log也無法進行恢復(fù)。

所以為了保證數(shù)據(jù)頁的寫入安全,引入了double write。double write的實現(xiàn)分兩個部分,一個是緩沖池中2M的內(nèi)存塊

大小,一個是共享表空間中連續(xù)的128個頁,大小是2M。臟頁從flush list刷新時,并不是直接刷新到磁盤而是先調(diào)用

函數(shù)(memcpy),將臟頁拷貝到double write buffer中,然后再分兩次,每次1M將double write buffer 刷新到

磁盤double write 區(qū),之后再調(diào)用fsync操作,同步到磁盤。

如果是寫doublewrite buffer本身失敗,那么這些數(shù)據(jù)不會被寫到磁盤,innodb此時會從磁盤載入原始的數(shù)據(jù),然后通過innodb的事務(wù)日志來計算出正確的數(shù)據(jù),重新 寫入到doublewrite buffer。

如果應(yīng)用在業(yè)務(wù)高峰期,innodb_dblwr_pages_written:innodb_dblwr_writes遠小于64:1,則說明,系統(tǒng)寫入壓力不大。

雖然,double write buffer刷新到磁盤的時候是順序?qū)懀€是是有性能損耗的。

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

看完了這篇文章,相信你對“mysql innodb double write概念是什么”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章標題:mysqlinnodbdoublewrite概念是什么
當(dāng)前URL:http://bm7419.com/article2/pcspoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、動態(tài)網(wǎng)站、網(wǎng)站排名網(wǎng)站設(shè)計、網(wǎng)站策劃、品牌網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計