• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Innodb三大特性之doublewrite_MySQL

    來源:懂視網 責編:小采 時間:2020-11-09 20:07:35
    文檔

    Innodb三大特性之doublewrite_MySQL

    Innodb三大特性之doublewrite_MySQL:1、doublewrite buffer(mysql官方的介紹) InnoDB uses a novel file flush technique called doublewrite. Before writing pages to the data files, InnoDB first writes them to a contiguous
    推薦度:
    導讀Innodb三大特性之doublewrite_MySQL:1、doublewrite buffer(mysql官方的介紹) InnoDB uses a novel file flush technique called doublewrite. Before writing pages to the data files, InnoDB first writes them to a contiguous

    1、doublewrite buffer(mysql官方的介紹)

    InnoDB uses a novel file flush technique called doublewrite. Before writing pages to the data files, InnoDB first writes them to a contiguous area called the doublewrite buffer. Only after the write and the flush to the doublewrite buffer have completed, does InnoDB write the pages to their proper positions in the data file. If there is an operating system, storage subsystem, or mysqld process crash in the middle of a page write, InnoDB can later find a good copy of the page from the doublewrite buffer during crash recovery.

    Although data is always written twice, the doublewrite buffer does not require twice as much I/O overhead or twice as many I/O operations. Data is written to the buffer itself as a large sequential chunk, with a single fsync() call to the operating system.

    To turn off the doublewrite buffer, specify the option innodb_doublewrite=0.

    2、partial page write

    InnoDB 的Page Size一般是16KB,其數據校驗也是針對這16KB來計算的,將數據寫入到磁盤是以Page為單位進行操作的。而計算機硬件和操作系統,在極端情況下 (比如斷電)往往并不能保證這一操作的原子性,16K的數據,寫入4K 時,發生了系統斷電/os crash ,只有一部分寫是成功的,這種情況下就是 partial page write 問題。

    很多DBA 會想到系統恢復后,MySQL 可以根據redo log 進行恢復,而mysql在恢復的過程中是檢查page的checksum,checksum就是pgae的最后事務號,發生partial page write 問題時,page已經損壞,找不到該page中的事務號,就無法恢復

    所以說,當page 損壞之后,其實應用redo是沒有意義的,這時候無法使用redo來恢復,因為原始頁已經損壞了,會發生數據丟失。

    3、doublewrite

    在InnoDB將BP中的Dirty Page刷(flush)到磁盤上時,首先會將(memcpy函數)Page刷到InnoDB tablespace的一個區域中,我們稱該區域為Double write Buffer(大小為2MB,每次寫入1MB)。在向Double write Buffer寫入成功后,第二步、再將數據拷貝到數據文件對應的位置。

    當第二步過程中發生故障,也就是發生partial page write的問題。恢復的時候先檢查頁內的checksum是否相同,不一致,則直接從doublewrite中恢復。

    1)如果寫dw buffer失敗。那么這些數據不會寫到磁盤,innodb會載入磁盤原始數據和redo日志比較,并重新刷到dw buffer。

    2)如果寫dw buffer成功,但是刷新到磁盤失敗,那么innodb就不會通過事務日志來恢復了,而是直接刷新dw buffer中的數據。

    4、對性能的影響

    系統需要將數據寫兩份,一般認為,Double Write是會降低系統性能的。peter猜測可能會有5-10%的性能損失,但是因為實現了數據的一致,是值得的。Mark Callaghan認為這應該是存儲層面應該解決的問題,放在數據庫層面無疑是犧牲了很多性能的。

    事實上,Double Write對性能影響并沒有你想象(寫兩遍性能應該降低了50%吧?)的那么大。在BP中一次性往往會有很多的Dirty Page同時被flush,Double Write則把這些寫操作,由隨機寫轉化為了順序寫。而在Double Write的第二個階段,因為Double Write Buffer中積累了很多Dirty Page,所以向真正的數據文件中寫數據的時候,可能有很多寫操作可以合并,這樣有可能會降低Fsync的調用次數。

    基于上面的原因,Double Write并沒有想象的那么糟。另外,Dimitri在測試后,發現打開和關閉Double Write對效率的影響并不大。

    5、doublewrite參數

    mysql> show variables like "%double%";
    +--------------------+-------+
    | Variable_name | Value |
    +--------------------+-------+
    | innodb_doublewrite | ON |
    +--------------------+-------+
    1 row in set (0.00 sec)
    
    mysql> SHOW STATUS LIKE "%innodb_dblwr%";
    +----------------------------+-------+
    | Variable_name | Value |
    +----------------------------+-------+
    | Innodb_dblwr_pages_written | 447 |
    | Innodb_dblwr_writes | 38 |
    +----------------------------+-------+
    2 rows in set (0.00 sec)

    從上面可以看出, Flush了447次到doublewrite buffer中,寫文件共38次,則每次write合并了447/38次flush

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Innodb三大特性之doublewrite_MySQL

    Innodb三大特性之doublewrite_MySQL:1、doublewrite buffer(mysql官方的介紹) InnoDB uses a novel file flush technique called doublewrite. Before writing pages to the data files, InnoDB first writes them to a contiguous
    推薦度:
    標簽: 三大 my mysql
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲国产精品尤物yw在线| 四虎国产精品永久免费网址| 亚洲电影日韩精品| 色综合久久精品中文字幕首页| 亚洲欧美精品AAAAAA片| 国产精品亚洲综合专区片高清久久久| 久久国产精品无码一区二区三区| 国产一区二区三区在线观看精品| 国产成人精品天堂| 国产中老年妇女精品| 中日精品无码一本二本三本| 久久丝袜精品中文字幕| 国产精品福利区一区二区三区四区 | 欧美性videofree精品| 精品无码人妻一区二区免费蜜桃| 日本精品久久久久影院日本| 国产精品无码专区在线观看| 亚洲综合精品一二三区在线| 99国产精品永久免费视频| 久久亚洲中文字幕精品有坂深雪| 综合久久精品色| 亚洲精品私拍国产福利在线| 久久久久久久久久久免费精品| 日韩精品一区二区三区色欲AV| 国产亚洲精品资在线| 国产伦精品一区二区三区女 | 亚洲国模精品一区| 88国产精品欧美一区二区三区| 人人妻人人澡人人爽人人精品97| 中文字幕精品无码久久久久久3D日动漫 | 丰满人妻熟妇乱又伦精品劲| 国产精品久久久久久久| 精品国产sm捆绑最大网免费站| 亚洲精品无码不卡在线播放HE| 最新精品亚洲成a人在线观看| 欧美亚洲另类精品第一页| 欧美日韩精品久久久久| 欧美精品人爱a欧美精品| 日本精品一区二区久久久| 欧美日韩国产成人高清视频,欧美日韩在线精品一 | 国产精品青草视频免费播放|