内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

我很理解MySQL中的doublewrite-創(chuàng)新互聯(lián)

本篇文章為大家展示了我很理解MySQL中的double write,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

為桓仁等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及桓仁網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、桓仁網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

    MySQL里的double write是InnoDB的三大閃亮特性,另外兩個(gè)是insert buffer 和自適應(yīng)哈希,其實(shí)還有幾個(gè)比如異步IO,F(xiàn)lush neighbour Page(刷新鄰接頁(yè)),這個(gè)和系統(tǒng)層面的關(guān)聯(lián)性較高,所以三大亮點(diǎn)還是更有針對(duì)性的。

   當(dāng)然一說(shuō)到MySQL里的double write,其實(shí)主要是要應(yīng)對(duì)一個(gè)很自然的問(wèn)題,那就是partial write。

經(jīng)典的partial write問(wèn)題

   這個(gè)問(wèn)題比較經(jīng)典,很多數(shù)據(jù)庫(kù)設(shè)計(jì)中都需要考慮到這樣一個(gè)臨界點(diǎn)的問(wèn)題,MySQL中的頁(yè)是16k,數(shù)據(jù)的校驗(yàn)是按照這個(gè)為單位進(jìn)行的,而操作系統(tǒng)層面的數(shù)據(jù)單位肯定達(dá)不到16k,比如是4k,那么一旦發(fā)生斷電的時(shí)候,只保留了部分寫入,如果是Oracle DBA一般對(duì)此都會(huì)很淡定,說(shuō)用redo來(lái)恢復(fù)嘛,但是可能我們被屏蔽了一些細(xì)節(jié),MySQL在恢復(fù)的過(guò)程中一個(gè)基準(zhǔn)是檢查page的checksum,也就是page的最后事務(wù)號(hào),發(fā)生這種partial page write 的問(wèn)題時(shí),因?yàn)閜age已經(jīng)損壞,所以就無(wú)法定位到page中的事務(wù)號(hào),所以這個(gè)時(shí)候redo就無(wú)法直接恢復(fù)。

   由此引申一點(diǎn),partial write的問(wèn)題在Oracle中肯定也會(huì)存在,但是只是Oracle替我們把這個(gè)過(guò)程平滑的做好了。其中有設(shè)計(jì)的差異,還有恢復(fù)技術(shù)的差別。但是無(wú)論如何這個(gè)問(wèn)題都不會(huì)繞過(guò)去,還得解決。

   所以這一類問(wèn)題,如果討論起來(lái),那可以討論很長(zhǎng)時(shí)間,可以把體系結(jié)構(gòu)里的方方面面拿出來(lái)分析,做對(duì)比。

簡(jiǎn)單分析double write問(wèn)題

   對(duì)此我畫了一個(gè)相對(duì)簡(jiǎn)陋的圖,也歡迎大家提出改進(jìn)建議。

我很理解MySQL中的double write

    總體來(lái)說(shuō),double write buffer就是一種緩沖緩存技術(shù),主要的設(shè)計(jì)就是為了防止數(shù)據(jù)在斷電,異常情況下丟失數(shù)據(jù)。里面有幾個(gè)點(diǎn)需要注意的就是,數(shù)據(jù)在buffer pool中修改后成了臟頁(yè),這個(gè)過(guò)程會(huì)產(chǎn)生binglog記錄和redo記錄,當(dāng)然數(shù)據(jù)寫入數(shù)據(jù)文件是一個(gè)異步的工作,如果細(xì)看,在共享表空間(system tablespace)中會(huì)存在一個(gè)2M的空間,分為2個(gè)單元,一共128個(gè)頁(yè),其中120個(gè)用于批量刷臟數(shù)據(jù),另外8個(gè)用于Single Page Flush。根據(jù)阿里同學(xué)的分析主要是做區(qū)分是因?yàn)榕克⑴K是后臺(tái)線程做的,這樣不影響前臺(tái)線程。而Single page flush是用戶線程發(fā)起的,需要盡快的刷臟并替換出一個(gè)空閑頁(yè)出來(lái)。所以不是一個(gè)嚴(yán)格的64+64的拆分。

       而數(shù)據(jù)刷新的過(guò)程,是先使用memcopy把臟數(shù)據(jù)復(fù)制到內(nèi)存中的double write buffer,分兩次寫完,每次寫1MB到共享表空間,然后就是調(diào)用fsync來(lái)同步到磁盤。這里有一點(diǎn)需要注意的是,這個(gè)刷新到共享表空間的過(guò)程,雖然是兩次,但是是順序?qū)懀蚤_銷不會(huì)很大,也就不會(huì)像大家想象的double write性能可能很差,根據(jù)Percona的測(cè)試,大概也就是5%左右的差別,數(shù)據(jù)重要還是性能更重要,這是一個(gè)基本的命題。當(dāng)然后續(xù)會(huì)再寫入對(duì)應(yīng)的表空間文件中,這個(gè)過(guò)程就是隨機(jī)寫,性能開銷就會(huì)大一些。所以在早些時(shí)候是用SSD的時(shí)候很多人也會(huì)帶有如此的顧慮,順序?qū)戇€是隨機(jī)寫。

    當(dāng)然double write這么設(shè)計(jì)就是全面為了作為恢復(fù)而用,要不這么大張旗鼓就不值得了。這個(gè)圖來(lái)源于 http://blog.csdn.net/renfengjun/article/details/41541809

  我覺(jué)得已經(jīng)說(shuō)得很明白了,就直接引用過(guò)來(lái)了。我很理解MySQL中的double write

   可以看到里面的一個(gè)中心詞就是checksum,如果出現(xiàn)了partil write的時(shí)候,比如斷電,那么兩次寫的過(guò)程中,很可能page是不一致的,這樣checksum校驗(yàn)就很可能出現(xiàn)問(wèn)題,而出現(xiàn)問(wèn)題的時(shí)候,因?yàn)橛辛饲捌趯懭牍蚕肀砜臻g的頁(yè)信息,所以就可以重構(gòu)出頁(yè)的信息重新寫入。

double write的另外一個(gè)作用

    double write其實(shí)還有一個(gè)特點(diǎn),就是將數(shù)據(jù)從double write buffer寫到真正的segment中的時(shí)候, 系統(tǒng)會(huì)自動(dòng)合并連接空間刷新的方式, 這樣一來(lái)每次就可以刷新多個(gè)pages,提高效率。

比如下面的環(huán)境,我們可以根據(jù)show status的結(jié)果來(lái)得到一個(gè)基本的合并頁(yè)的情況。

> show status like '%dbl%';  

| Variable_name              | Value    |

| Innodb_dblwr_pages_written | 23196544 |
| Innodb_dblwr_writes        | 4639373  |
通過(guò)InnoDB_dblwr_pages_written/InnoDB_dblwr_writes  就可以得到,通過(guò)指標(biāo)也可基本看明白。
   

Percona中的double write改進(jìn)

   當(dāng)然對(duì)于double write,在Percona中也在持續(xù)改進(jìn),在Percona 5.7版本中做了一個(gè)改進(jìn),你可以看到一個(gè)新的參數(shù),innodb_parallel_doublewrite_path

| innodb_parallel_doublewrite_path | xb_doublewrite |在系統(tǒng)層面,也會(huì)存在一個(gè)30的一個(gè)文件對(duì)應(yīng)。

-rw-r----- 1 mysql mysql 31457280 Mar 28 17:54 xb_doublewrite也就是并行double write,關(guān)于這個(gè)特性的詳細(xì)描述和測(cè)試,可以參考。https://www.percona.com/blog/2016/05/09/percona-server-5-7-parallel-doublewrite/?utm_source=tuicool&utm_medium=referral

里面提供了很多詳細(xì)測(cè)試的對(duì)比和分析。當(dāng)然MariaDB,Facebook,Aurora也有一些自己的實(shí)現(xiàn)方式和考慮,這個(gè)限于精力,還沒(méi)有細(xì)細(xì)測(cè)試分析。

上述內(nèi)容就是我很理解MySQL中的double write,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

本文標(biāo)題:我很理解MySQL中的doublewrite-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://www.rwnh.cn/article46/cojgeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站、服務(wù)器托管App設(shè)計(jì)

廣告

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

h5響應(yīng)式網(wǎng)站建設(shè)
金堂县| 甘孜县| 本溪市| 于田县| 博乐市| 侯马市| 西藏| 台东县| 达州市| 乌恰县| 民丰县| 资中县| 澄迈县| 朝阳市| 青州市| 沈阳市| 新丰县| 绥德县| 阜城县| 武胜县| 涿州市| 田东县| 辉县市| 古浪县| 叶城县| 敦化市| 江安县| 隆化县| 三都| 巧家县| 崇明县| 高碑店市| 新宁县| 江北区| 应用必备| 开封县| 延寿县| 长寿区| 辽阳县| 长阳| 社会|