国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入解析MySQL雙寫(xiě)緩沖區(qū)(Doublewrite Buffer):原理及作用

這篇具有很好參考價(jià)值的文章主要介紹了深入解析MySQL雙寫(xiě)緩沖區(qū)(Doublewrite Buffer):原理及作用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

MySQL的InnoDB存儲(chǔ)引擎以其卓越的事務(wù)處理和數(shù)據(jù)完整性保護(hù)能力而受到廣泛贊譽(yù)。在這些特性中,Doublewrite Buffer作為一個(gè)關(guān)鍵組件,確保了數(shù)據(jù)的完整性和可靠性。在這篇文章中,我們將深入探討Doublewrite Buffer的原理、作用及其在MySQL中的重要地位。

1??什么是Double write Buffer

Doublewrite Buffer是MySQL數(shù)據(jù)庫(kù)中InnoDB存儲(chǔ)引擎的一種機(jī)制,用于解決部分寫(xiě)失效的問(wèn)題,提高數(shù)據(jù)完整性和可靠性。Doublewrite Buffer是內(nèi)存+磁盤(pán)的結(jié)構(gòu),包括內(nèi)存結(jié)構(gòu)和磁盤(pán)結(jié)構(gòu)兩個(gè)部分。

  • 在內(nèi)存結(jié)構(gòu)中,Doublewrite Buffer由128個(gè)頁(yè)(Page)構(gòu)成,大小是2MB。這些頁(yè)在內(nèi)存中以Doublewrite Buffer的形式存在。

  • 在磁盤(pán)結(jié)構(gòu)中,Doublewrite Buffer在系統(tǒng)表空間上是128個(gè)頁(yè)(2個(gè)區(qū),extend1和extend2),大小也是2MB。這些頁(yè)在磁盤(pán)上以Doublewrite File的形式存在。

Doublewrite Buffer的原理是在將數(shù)據(jù)頁(yè)寫(xiě)到數(shù)據(jù)文件之前,先將它們寫(xiě)入Doublewrite Buffer的共享表空間內(nèi)。在完成寫(xiě)入Doublewrite Buffer后,再將數(shù)據(jù)頁(yè)寫(xiě)入到數(shù)據(jù)文件的適當(dāng)位置。這種方式可以確保數(shù)據(jù)的一致性和完整性,因?yàn)樵趯?xiě)入過(guò)程中發(fā)生意外崩潰時(shí),可以從Doublewrite Buffer中找到完好的數(shù)據(jù)頁(yè)副本用于恢復(fù)。

深入解析MySQL雙寫(xiě)緩沖區(qū)(Doublewrite Buffer):原理及作用,DB,mysql,數(shù)據(jù)庫(kù),spring cloud,微服務(wù),java,jvm,dba

當(dāng)有數(shù)據(jù)頁(yè)要被寫(xiě)入數(shù)據(jù)文件時(shí),首先將頁(yè)數(shù)據(jù)通過(guò)memcpy函數(shù)拷貝至內(nèi)存中的Doublewrite Buffer中。然后,Doublewrite Buffer的內(nèi)存中的數(shù)據(jù)頁(yè)會(huì)刷寫(xiě)到Doublewrite Buffer的磁盤(pán)上,分兩次寫(xiě)入磁盤(pán)共享表空間中(連續(xù)存儲(chǔ),順序?qū)?,性能很高),每次?xiě)1MB。完成Doublewrite頁(yè)的寫(xiě)入之后,再將內(nèi)存中的Doublewrite Buffer中的頁(yè)寫(xiě)入到自己的表空間文件中。

通過(guò)這種方式,至少在兩次寫(xiě)操作中,數(shù)據(jù)文件和Doublewrite Buffer文件中至少有一份數(shù)據(jù)是正確無(wú)誤的。如果寫(xiě)磁盤(pán)過(guò)程發(fā)生了崩潰,那么MySQL重啟時(shí)可以通過(guò)校驗(yàn)和來(lái)確認(rèn)是否有錯(cuò)誤數(shù)據(jù),如果Doublewrite Buffer文件錯(cuò)誤了,就從數(shù)據(jù)文件中拉取原始數(shù)據(jù)根據(jù)redo log得出正確的目標(biāo)數(shù)據(jù),而如果數(shù)據(jù)文件錯(cuò)誤了,則將Doublewrite Buffer中的數(shù)據(jù)重新寫(xiě)入數(shù)據(jù)文件。

2??Doublewrite Buffer工作流程

  1. 寫(xiě)操作觸發(fā): 當(dāng)執(zhí)行INSERT、UPDATE或DELETE等寫(xiě)操作時(shí),MySQL首先將數(shù)據(jù)寫(xiě)入雙寫(xiě)緩沖區(qū)。
  2. 同步到Doublewrite File: 隨后,雙寫(xiě)緩沖區(qū)中的數(shù)據(jù)被同步(flush)到Doublewrite File中。這個(gè)過(guò)程是由后臺(tái)線程完成的,以確保數(shù)據(jù)的持久性。
  3. 實(shí)際數(shù)據(jù)寫(xiě)入: 一旦Doublewrite File中的數(shù)據(jù)被確認(rèn)已經(jīng)寫(xiě)入磁盤(pán),MySQL就可以將這些數(shù)據(jù)寫(xiě)入實(shí)際的數(shù)據(jù)文件中。
  4. 恢復(fù)機(jī)制: 如果在寫(xiě)操作過(guò)程中發(fā)生故障,MySQL可以從Doublewrite File中恢復(fù)數(shù)據(jù)。由于Doublewrite File中的數(shù)據(jù)是完整的,因此可以用來(lái)修復(fù)損壞的數(shù)據(jù)文件,確保數(shù)據(jù)的完整性和一致性。

3??為什么需要Doublewrite Buffer

從MySQL頁(yè)(Page)和Linux頁(yè)大小不同的角度來(lái)看,需要Doublewrite Buffer的原因主要是為了解決數(shù)據(jù)寫(xiě)入過(guò)程中的一致性和完整性問(wèn)題。

首先,我們需要了解MySQL的頁(yè)和Linux的頁(yè)大小不同。MySQL的頁(yè)通常大小為16KB,而Linux的頁(yè)大小可能因系統(tǒng)配置而有所不同,但常見(jiàn)的默認(rèn)大小是4KB。這意味著,當(dāng)MySQL寫(xiě)入一個(gè)頁(yè)的數(shù)據(jù)時(shí),實(shí)際上是寫(xiě)入了一個(gè)更大的塊,這個(gè)塊可能跨越了多個(gè)Linux頁(yè)。
深入解析MySQL雙寫(xiě)緩沖區(qū)(Doublewrite Buffer):原理及作用,DB,mysql,數(shù)據(jù)庫(kù),spring cloud,微服務(wù),java,jvm,dba

現(xiàn)在,考慮以下場(chǎng)景:

假設(shè)MySQL正在寫(xiě)入一個(gè)頁(yè)的數(shù)據(jù),并且這個(gè)操作只完成了部分,比如只寫(xiě)入了50%的數(shù)據(jù)。在這種情況下,如果直接將這個(gè)不完整的數(shù)據(jù)頁(yè)寫(xiě)入數(shù)據(jù)文件,那么數(shù)據(jù)文件就會(huì)處于一個(gè)不一致的狀態(tài)。某些查詢(xún)可能會(huì)讀取到這個(gè)不完整的數(shù)據(jù)頁(yè),導(dǎo)致數(shù)據(jù)損壞或不一致。

為了解決這個(gè)問(wèn)題,Doublewrite Buffer被引入。當(dāng)MySQL寫(xiě)入一個(gè)數(shù)據(jù)頁(yè)時(shí),首先會(huì)將整個(gè)頁(yè)寫(xiě)入Doublewrite Buffer。這樣,即使寫(xiě)操作只完成了部分,Doublewrite Buffer中的數(shù)據(jù)仍然是完整的。然后,Doublewrite Buffer中的數(shù)據(jù)再被同步(flush)到實(shí)際的數(shù)據(jù)文件中。這樣,即使發(fā)生故障,也可以從Doublewrite Buffer中恢復(fù)數(shù)據(jù),確保數(shù)據(jù)的完整性和一致性。

綜上所述,Doublewrite Buffer的存在是為了解決由于MySQL頁(yè)和Linux頁(yè)大小不同導(dǎo)致的數(shù)據(jù)寫(xiě)入過(guò)程中的一致性和完整性問(wèn)題。通過(guò)將數(shù)據(jù)先寫(xiě)入Doublewrite Buffer,然后再同步到實(shí)際的數(shù)據(jù)文件,可以確保數(shù)據(jù)的完整性和一致性,避免因故障導(dǎo)致的數(shù)據(jù)損壞或不一致問(wèn)題。

4??Doublewrite Buffer的參數(shù)

MySQL的雙寫(xiě)緩沖區(qū)可以通過(guò)以下參數(shù)進(jìn)行配置:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-814977.html

  • innodb_doublewrite: 控制是否啟用雙寫(xiě)緩沖區(qū)的參數(shù)。可以設(shè)置為ON或OFF。默認(rèn)為ON。
  • innodb_doublewrite_file: 指定Doublewrite File的路徑和文件名。默認(rèn)值為ib_logfile0和ib_logfile1。
  • innodb_doublewrite_buffer_size: 控制雙寫(xiě)緩沖區(qū)大小的參數(shù)。默認(rèn)值為256KB??梢愿鶕?jù)需要進(jìn)行調(diào)整,但不應(yīng)設(shè)置得過(guò)大或過(guò)小,以免影響系統(tǒng)性能或?qū)е虏槐匾膬?nèi)存占用。

到了這里,關(guān)于深入解析MySQL雙寫(xiě)緩沖區(qū)(Doublewrite Buffer):原理及作用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL 存儲(chǔ)引擎 InnoDB 內(nèi)存結(jié)構(gòu)之更改緩沖區(qū)

    MySQL 存儲(chǔ)引擎 InnoDB 內(nèi)存結(jié)構(gòu)之更改緩沖區(qū)

    更改緩沖區(qū)(Change Buffer)是一種特殊的數(shù)據(jù)結(jié)構(gòu),用于緩存不在緩沖池中的二級(jí)索引(secondary index)頁(yè)的更改??赡軄?lái)自于 INSERT 、 UPDATE 或 DELETE 操作(數(shù)據(jù)操作語(yǔ)言,DML)的緩沖更改,會(huì)在后續(xù)通過(guò)其他讀操作將這些頁(yè)加載到緩沖池時(shí)被合并。 與聚簇索引(clustered indexe

    2024年02月10日
    瀏覽(16)
  • C++環(huán)形緩沖區(qū)設(shè)計(jì)與實(shí)現(xiàn):從原理到應(yīng)用的全方位解析

    C++環(huán)形緩沖區(qū)設(shè)計(jì)與實(shí)現(xiàn):從原理到應(yīng)用的全方位解析

    環(huán)形緩沖區(qū)(Circular Buffer),也被稱(chēng)為循環(huán)緩沖區(qū)(Cyclic Buffer)或者環(huán)形隊(duì)列(Ring Buffer),是一種數(shù)據(jù)結(jié)構(gòu)類(lèi)型,它在內(nèi)存中形成一個(gè)環(huán)形的存儲(chǔ)空間。環(huán)形緩沖區(qū)的特點(diǎn)是其終點(diǎn)和起點(diǎn)是相連的,形成一個(gè)環(huán)狀結(jié)構(gòu)。這種數(shù)據(jù)結(jié)構(gòu)在處理流數(shù)據(jù)和實(shí)現(xiàn)數(shù)據(jù)緩存等場(chǎng)景中具

    2024年02月07日
    瀏覽(34)
  • 理解緩沖區(qū)

    理解緩沖區(qū)

    對(duì)于這樣的代碼,首先可以肯定的是 printf 語(yǔ)句先于 sleep 執(zhí)行,既然如此那么就應(yīng)該是先打印語(yǔ)句然后進(jìn)行休眠,下面看看結(jié)果: 但這里卻是先休眠以后再打印語(yǔ)句,這是因?yàn)榇嬖谝粋€(gè)叫緩沖區(qū)的東西,當(dāng)我們要向外設(shè)寫(xiě)入數(shù)據(jù)(讓顯示器顯示就是向顯示器寫(xiě)入數(shù)據(jù))時(shí)會(huì)將

    2023年04月25日
    瀏覽(22)
  • Redis 緩沖區(qū)

    Redis 緩沖區(qū)

    緩沖區(qū)的應(yīng)用場(chǎng)景 : 客戶(hù)端與服務(wù)器端的通信時(shí),暫存客戶(hù)端發(fā)送的命令數(shù)據(jù),或暫存服務(wù)器端返給客戶(hù)端的數(shù)據(jù)結(jié)果 主從節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)同步時(shí),暫存主節(jié)點(diǎn)接收的寫(xiě)命令和數(shù)據(jù) 緩沖區(qū) : 避免客戶(hù)端和服務(wù)器端的請(qǐng)求發(fā)送和處理速度不匹配 服務(wù)器給每個(gè)連接的客戶(hù)端都準(zhǔn)

    2024年02月07日
    瀏覽(21)
  • 8.緩沖區(qū)管理

    8.緩沖區(qū)管理

    雙緩沖區(qū):TC+M 假設(shè)初始狀態(tài)緩沖區(qū)1滿(mǎn),緩沖區(qū)2空,工作區(qū)為空。 剛開(kāi)始緩沖區(qū)2為空,所以設(shè)備可以向緩沖區(qū)2中沖入數(shù)據(jù)耗時(shí)T,另一方面剛開(kāi)始緩沖區(qū)1中是滿(mǎn)的,所以剛開(kāi)始就可以把緩沖區(qū)1中的數(shù)據(jù)傳送到工作區(qū)中,M時(shí)刻工作區(qū)被充滿(mǎn),CPU就開(kāi)始處理數(shù)據(jù)耗時(shí)C,處理完

    2024年02月11日
    瀏覽(26)
  • 【Linux】理解緩沖區(qū)

    【Linux】理解緩沖區(qū)

    我們發(fā)現(xiàn) printf 和 fwrite (庫(kù)函數(shù))都輸出了2次,而 write 只輸出了一次(系統(tǒng)調(diào)用)。為什么呢?肯定和fork有關(guān)! C接口的函數(shù)被打印了兩次系統(tǒng)接口前后只是打印了一次:和fork函數(shù)有關(guān),fork會(huì)創(chuàng)建子進(jìn)程。在創(chuàng)建子進(jìn)程的時(shí)候,數(shù)據(jù)會(huì)被處理成兩份,父子進(jìn)程發(fā)生寫(xiě)時(shí)拷

    2024年01月23日
    瀏覽(19)
  • 【Linux】文件緩沖區(qū)

    【Linux】文件緩沖區(qū)

    提到文件緩沖區(qū)這個(gè)概念我們好像并不陌生,但是我們對(duì)于這個(gè)概念好像又是模糊的存在腦海中,之間我們?cè)诮榻Bc語(yǔ)言文件操作已經(jīng)簡(jiǎn)單的提過(guò)這個(gè)概念,今天我們不妨深入理解什么是文件緩沖區(qū) 通過(guò)自己實(shí)現(xiàn)庫(kù)中的一些文件操作函數(shù)更加深入的理解文件緩沖區(qū) 自定義實(shí)現(xiàn)

    2024年02月10日
    瀏覽(25)
  • C/C++緩沖區(qū)

    什么是緩沖區(qū)? 程序和磁盤(pán)文件之間不能直接交換數(shù)據(jù),必須通過(guò)內(nèi)存中一個(gè)被稱(chēng)為文件緩沖區(qū)的區(qū)域來(lái)中轉(zhuǎn)。ANSIC標(biāo)準(zhǔn)規(guī)定,系統(tǒng)會(huì)自動(dòng)為每個(gè)正在使用的文件在內(nèi)存中開(kāi)辟一個(gè)緩沖區(qū),緩沖區(qū)的大小隨機(jī)器而異。 緩沖區(qū)有什么作用? 假設(shè)我們?cè)诩抑行菹⒖措娨暢粤闶常?/p>

    2024年02月15日
    瀏覽(21)
  • SEED-緩沖區(qū)溢出攻擊

    SEED-緩沖區(qū)溢出攻擊

    實(shí)驗(yàn)環(huán)境:SEED-Ubuntu20.04虛擬機(jī) a) 緩沖區(qū)溢出原理 **緩沖區(qū)溢出攻擊原理:**利用溢出的數(shù)據(jù)改變?cè)闯绦虻目刂屏?,如覆蓋返回地址 b) 分析生成badfile文件的exploit.py程序 Shellcode部分 字節(jié)數(shù)組末尾處填入shellcode c) 編譯目標(biāo)服務(wù)器上具有緩沖區(qū)溢出漏洞的stack.c程序,并將其緩沖

    2024年02月07日
    瀏覽(26)
  • 【linux】重定向+緩沖區(qū)

    【linux】重定向+緩沖區(qū)

    自我名言 : 只有努力,才能追逐夢(mèng)想,只有努力,才不會(huì)欺騙自己。 喜歡的點(diǎn)贊,收藏,關(guān)注一下把! close(1),為什么沒(méi)有打印新建文件fd呢? printf(“%dn”,fd); printf會(huì)把內(nèi)容打印到stdout文件中。 但是close(1)關(guān)閉標(biāo)準(zhǔn)輸出stdout—顯示器,int fd=open();新打開(kāi)的文件fd是1。 st

    2024年02月08日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包