真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

《InnoDB引擎八》InnoDB關(guān)鍵特性-兩次寫-創(chuàng)新互聯(lián)

在這里插入圖片描述

創(chuàng)新互聯(lián)公司主營宜都網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),宜都h5微信小程序開發(fā)搭建,宜都網(wǎng)站營銷推廣歡迎宜都等地區(qū)企業(yè)咨詢InnoDB 關(guān)鍵特性

??InnoDB存儲引擎的關(guān)鍵特性包括:

  • Insert Buffer (插入緩沖)
  • Double Write (兩次寫)
  • Adaptive Hash Index (自適應(yīng)哈希索引)
  • Async IO (異步IO)
  • Flush Neighbor Page (刷新領(lǐng)接頁)

??這些特性為InnoDB存儲引擎帶來了更好的性能以及更高的可靠性。

兩次寫

如果說Insert Buffer帶給InnoDB存儲引擎是性能上的提升,那么doublewrite帶給InnoDB存儲引擎的是數(shù)據(jù)頁的可靠性。

當(dāng)數(shù)據(jù)庫宕機時,可能InnoDB引擎正在寫入某個頁到表種,而這個頁只寫了一部分,比如16KB的頁,只寫了前4KB,之后就發(fā)生了宕機,這種情況被稱為部分寫時效(partial page write)。在InnoDB存儲引擎未使用doublewrite技術(shù)前,曾經(jīng)出現(xiàn)過因為部分寫失效而導(dǎo)致數(shù)據(jù)丟失的情況。

或許大家會想到,如果發(fā)生寫失效,可以通過重做日志進行恢復(fù)。但是必須清楚的認識到,重做日志中記錄的是對頁的物理操作,如偏移量800,寫’aaa’記錄。如果這個頁本身已經(jīng)發(fā)生了損壞,再對其進行重做是沒有意義的。這就是說,在應(yīng)用(apply)重做日志前,用戶需要一個頁的副本,當(dāng)寫入失效發(fā)生時,先通過頁的副本來還原該頁,再進行重做,這就是doublewrite。

doublewrite由兩部分組成,一部分是內(nèi)存中的doublewrite buffer,大小為2MB,另一部分是物理磁盤上共享表空間中連續(xù)的128個頁,即2個分區(qū),大小同樣為2MB。在對緩沖池的臟頁進行刷新時,不直接寫磁盤,而是會根據(jù)memcpy函數(shù)將臟頁先復(fù)制到內(nèi)存中的doublewrite buffer,之后通過doublewrite buffer再分兩次,每次1MB順序?qū)懭牍蚕肀砜臻g的物理磁盤上,然后馬上調(diào)用fsynx函數(shù),同步磁盤,避免緩存寫帶來的問題。在這個過程中,因為doublewrite頁是連續(xù)的,因此這個過程是順序?qū)懙?,開銷并不是很大。在完成doublewrite頁的寫入之后,再將doublewrite buffer中的頁寫入各個表空間文件中,此時寫入則是離散的。可以通過以下命令觀察到doublewrite運行的情況:

在這里插入圖片描述

mysql>show global status like 'innodb_dblwr%'\G;
*************************** 1. row ***************************
Variable_name: Innodb_dblwr_pages_written
        Value: 9234
*************************** 2. row ***************************
Variable_name: Innodb_dblwr_writes
        Value: 1424
2 rows in set (0.00 sec)

可以看到,doublewrite一共寫了9234個頁,但實際寫入次數(shù)為1424。如果發(fā)現(xiàn)系統(tǒng)在高峰時的Innodb_dblwr_pages_written:Innodb_dblwr_writes遠小于,那么可以說明系統(tǒng)壓力并不是很高。

如果操作系統(tǒng)在將頁寫入磁盤的過程中發(fā)生了崩潰,在恢復(fù)過程中,InnoDB存儲引擎可以從共享表空間中的doublewrite中找到該頁的一個副本,將其復(fù)制到表空間文件,再應(yīng)用重做日志。

注意:如果用戶需要統(tǒng)計數(shù)據(jù)庫生產(chǎn)環(huán)境中寫入的量,最安全的方法是根據(jù)Innodb_dblwr_pages_written來進行統(tǒng)計,這在所有版本的MySQL數(shù)據(jù)庫中都是正確的。

參數(shù)skip_innodb_doublewrite可以禁止使用doublewrite功能,這時可能會發(fā)生前面體積的寫失效問題。不過如果用戶由多個從服務(wù)器(slave),需要提供較快的性能,也許可以通過啟用這個參數(shù)。不過對于需要提供高可靠的主服務(wù)器(master),任何時候用戶都應(yīng)該確保開啟doublewrite功能。

注意:有些文件系統(tǒng)本身就提供了部分寫失效的防范機制,如ZFS文件系統(tǒng)。在這種情況下,用戶就不需要開啟doublewrite了。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


分享題目:《InnoDB引擎八》InnoDB關(guān)鍵特性-兩次寫-創(chuàng)新互聯(lián)
文章鏈接:http://weahome.cn/article/cohjdh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部