亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

MySQL的雙寫緩沖區Doublewrite Buffer詳解

瀏覽:15日期:2023-06-23 19:40:37
目錄為什么需要Doublewrite BufferDoublewrite Buffer原理Doublewrite Buffer相關參數總結為什么需要Doublewrite Buffer

我們常見的服務器一般都是Linux操作系統,Linux文件系統頁(OS Page)的大小默認是4KB。而MySQL的頁(Page)大小默認是16KB。

可以使用如下命令查看MySQL的Page大?。?/p>SHOW VARIABLES LIKE 'innodb_page_size';

一般情況下,其余程序因為需要跟操作系統交互,它們的頁(Page)都會大于等于操作系統的頁大小,為整數倍。比如,Oracle的Page大小為8KB。

MySQL程序是跑在Linux操作系統上的,需要跟操作系統交互,所以MySQL中一頁數據刷到磁盤,要寫4個文件系統里的頁。

需要注意的是,這個操作并非原子操作,比如我操作系統寫到第二個頁的時候,Linux機器斷電了,這時候就會出現問題了。造成”頁數據損壞“。并且這種”頁數據損壞“靠 redo日志是無法修復的。

重做日志中記錄的是對頁的物理操作,而不是頁面的全量記錄,而如果發生partial page write(部分頁寫入)問題時,出現問題的是未修改過的數據,此時重做日志(Redo Log)無能為力。寫doublewrite buffer成功了,這個問題就不用擔心了。

Doublewrite Buffer的出現就是為了解決上面的這種情況,雖然名字帶了Buffer,但實際上Doublewrite Buffer是內存+磁盤的結構。

Doublewrite Buffer是一種特殊文件flush技術,帶給InnoDB存儲引擎的是數據頁的可靠性。它的作用是,在把頁寫到數據文件之前,InnoDB先把它們寫到一個叫doublewrite buffer(雙寫緩沖區)的共享表空間內,在寫doublewrite buffer完成后,InnoDB才會把頁寫到數據文件的適當的位置。如果在寫頁的過程中發生意外崩潰,InnoDB在稍后的恢復過程中在doublewrite buffer中找到完好的page副本用于恢復。

Doublewrite Buffer原理

如上圖所示,當有頁數據要刷盤時:

頁數據先通過memcpy函數拷貝至內存中的Doublewrite Buffer中;Doublewrite Buffer的內存里的數據頁,會fsync刷到Doublewrite Buffer的磁盤上,分兩次寫入磁盤共享表空間中(連續存儲,順序寫,性能很高),每次寫1MB;Doublewrite Buffer的內存里的數據頁,再刷到數據磁盤存儲.ibd文件上(離散寫);

Doublewrite Buffer內存結構由128個頁(Page)構成,大小是2MB。

Doublewrite Buffer磁盤結構在系統表空間上是128個頁(2個區,extend1和extend2),大小是2MB。

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

MySQL會檢查double writer的數據的完整性,如果不完整直接丟棄double write buffer內容,重新執行那條redo log,如果double write buffer的數據是完整的,用double writer buffer的數據更新該數據頁,跳過該redo log。

所以在正常的情況下,MySQL寫數據頁時,會寫兩遍到磁盤上,第一遍是寫到doublewrite buffer,第二遍是寫到真正的數據文件中,這就是“Doublewrite”的由來。

在數據庫異常關閉的情況下啟動時,都會做數據庫恢復(redo)操作,恢復的過程中,數據庫都會檢查頁面是不是合法(校驗等等),如果發現一個頁面校驗結果不一致,則此時會用到雙寫這個功能。

我們可以通過如下命令來監控Doublewrite Buffer工作負載:

show global status like '%dblwr%';Doublewrite Buffer相關參數innodb_doublewrite:Doublewrite Buffer是否啟用開關,默認是開啟狀態,InnoDB將所有數據存儲兩次,首先到雙寫緩沖區,然后到實際數據文件。Innodb_dblwr_pages_written:記錄寫入到DWB中的頁數量。Innodb_dblwr_writes:記錄DWB寫操作的次數??偨Y

InnoDB Doublewrite Buffer是InnoDB的一個重要特性,用于保證MySQL數據的可靠性和一致性。它的實現原理是通過將要寫入磁盤的數據先寫入到Doublewrite Buffer中的內存緩存區域,然后再寫入到磁盤的兩個不同位置,來避免由于磁盤損壞等因素導致數據丟失或不一致的問題。Doublewrite Buffer對于保證MySQL數據的安全性和一致性具有重要意義。

到此這篇關于MySQL的雙寫緩沖區Doublewrite Buffer詳解的文章就介紹到這了,更多相關MySQL的雙寫緩沖區內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
主站蜘蛛池模板: 极品毛片 | 国产精品欧美一区二区三区 | 日韩欧美一级毛片视频免费 | 在线免费观看国产视频 | 精品美女在线 | 久久99精品久久久久子伦小说 | 国产精品国产三级国产 | 成年大片免费高清在线观看 | 99热国产这里只有精品免费 | 亚洲人成网站在线观看青青 | 欧美一级做a爰片久毛片潮 欧美一级做a爰片免费 | 青青操国产视频 | 国产精品一区二区久久 | 在线爽 | 久久综合九色综合97飘花 | 国产制服 国产制服一区二区 | 国产福利不卡视频 | 三级 在线播放 | 国产亚洲一欧美一区二区三区 | 国产精品果冻麻豆精东天美 | 国产超级乱淫片中文 | 国语自产偷拍精品视频偷最新 | 美女黄色一级片 | 久久亚洲国产精品 | 成人短视频在线在线观看 | 成人mv高清在线 | 成人满18在线观看网站免费 | 欧美黄免在线播放 | 玖玖精品在线视频 | 日本亚洲成高清一区二区三区 | www.青青草| 2022久久免费精品国产72精品 | 一本大道香蕉中文日本不卡高清二区 | 曰曰碰天天碰国产 | 手机看片1024久久香蕉 | 欧美成人性毛片免费版 | 爱爱激情网 | 中文字幕一区二区三区不卡 | 日韩一级片在线免费观看 | 国产精品视频全国免费观看 | 国产成人精品一区二三区在线观看 |