成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

阿里天貓二面:MySQL Double Write Buffer是什么?架構是怎樣的?為什么能保證崩潰恢復...

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

InnoDB 是 MySQL 中一種常用的事務性存儲引擎,它具有很多優秀的特性。其中,Doublewrite Buffer 是 InnoDB 的一個重要特性之一。

本文將介紹Doublewrite Buffer的原理和應用。

  • 為什么需要 Doublewrite Buffer?
  • Doublewrite Buffer 的架構設計和實現原理是什么?
  • Redo Log 與 不是可以實現崩潰恢復了碼?為何還需要 Doublewrite Buffer?

為什么需要 Doublewrite Buffer

InnoDB 頁大小為 16KB,而操作系統(如 Linux)頁大小為 4KB,單次寫入需拆分 4 個 OS 頁。

可以使用如下命令查看 MySQL 的 Page 大?。?/span>

SHOW VARIABLES LIKE 'innodb_page_size';

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

圖片圖片

需要注意的是,這個操作并非原子操作,比如我操作系統寫到第二個頁的時候,Linux 機器斷電了,這時候就會出現問題了。

造成”頁數據損壞“。并且這種”頁數據損壞“靠 redo 日志是無法修復的。

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

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

Doublewrite Buffer 是一種特殊文件 flush 技術,帶給 InnoDB 存儲引擎的是數據頁的可靠性。

它的作用是,在把頁寫到數據文件之前,InnoDB 先把它們寫到一個叫 doublewrite buffer(雙寫緩沖區)的共享表空間內,在寫 doublewrite buffer 完成后,InnoDB 才會把頁寫到數據文件的適當的位置。

如果在寫頁的過程中發生意外崩潰,InnoDB 在稍后的恢復過程中在 doublewrite buffer 中找到完好的 page 副本用于恢復。

架構設計

Doublewrite Buffer 采用 內存+磁盤雙層結構,關鍵組件如下:

圖片圖片

內存結構

  • 容量固定為 128 個頁(2MB),每個頁 16KB。
  • 數據頁刷盤前,通過 memcpy 拷貝至內存 Doublewrite Buffer。

磁盤結構

  • 位于系統表空間(ibdata),分為 2 個區(extent1/extent2),共 2MB。
  • 數據以 順序寫 方式寫入,避免隨機 I/O 開銷。

工作流程如下圖所示:

圖片圖片

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

  1. 第一步:記錄 Redo log。
  2. 第二步:臟頁從 Buffer Pool 拷貝至內存中的 Doublewrite Buffer。
  3. 第三步:Doublewrite Buffer 的內存里的數據頁,會 fsync 刷到 Doublewrite Buffer 的磁盤上,分兩次寫入磁盤共享表空間中(連續存儲,順序寫,性能很高),每次寫 1MB;
  4. 第四步:Doublewrite Buffer 的內存里的數據頁,再刷到數據磁盤存儲 .ibd 文件上(離散寫);

時序圖如下:

圖片圖片

崩潰恢復

如果第三步前,發生了崩潰,可以通過第一步記錄的 Redo log 來恢復。

如果第三步完成后發生了崩潰, InnoDB 存儲引擎可以從共享表空間中的 Double write 中找到該頁的一個副本,將其復制到獨立表空間文件,再應用 Redo log 恢復。

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

Doublewrite Buffer 通過 兩次寫 機制,在內存和磁盤間構建冗余副本,成為 InnoDB 保障數據完整性的基石。

其架構設計平衡了性能與可靠性,尤其在高并發或異常宕機場景下表現突出。

責任編輯:武曉燕 來源: 碼哥跳動
相關推薦

2021-03-17 15:54:32

IO零拷貝方式

2021-04-25 09:58:48

mmapJava面試

2021-10-27 20:54:24

分庫分表高并發

2025-04-02 08:25:00

Java開發wait

2022-10-18 08:38:16

內存泄漏線程

2025-04-14 10:00:00

負載均衡Java開發

2021-06-17 09:16:34

MySQL數據庫隔離級別

2022-06-15 09:02:32

JVM線程openJDK

2025-02-20 10:04:35

2025-02-27 09:30:00

MySQLLog Buffer數據庫

2024-12-16 08:20:00

2020-01-02 15:01:27

NginxApache服務器

2024-12-23 13:00:00

MySQLMVCC數據庫

2021-07-19 09:27:42

SSD內存Linux

2010-09-08 09:40:19

SIP協議是什么

2024-05-28 08:09:27

2021-04-27 18:12:22

WebSocket持久化連接HTTP

2023-07-04 07:53:53

MVCDDD架構

2024-04-24 07:00:00

Redis架構數據持久化

2024-08-30 08:59:15

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久成人精品一区二区三区 | 成年人网站免费 | 欧美精品一区二区免费视频 | 精品视频免费 | 欧美日韩国产一区二区三区 | 免费视频一区二区 | 在线观看www视频 | av电影一区 | 风间由美一区二区三区在线观看 | 久久亚 | 亚洲 欧美 日韩在线 | 精品久久久久久久久久久久久久 | 久久人爽| 欧美精品综合在线 | 天天av网 | 亚洲精品视频在线观看免费 | 欧美一级做性受免费大片免费 | 欧美激情精品久久久久 | 国产精品99999 | 亚洲视频 欧美视频 | 久久精品国产亚洲 | 天天干狠狠操 | 国产伦精品一区二区三区高清 | 做a视频在线观看 | 成人av高清 | 欧美精品日韩 | 国产精品久久精品 | 亚洲精品久久久久久久久久久久久 | 狠狠干天天干 | 亚洲视频一区在线 | 亚洲精品视频在线观看免费 | 高清黄色毛片 | 国产精品夜间视频香蕉 | 欧美一区二区在线 | 欧美一区二区三区在线视频 | 黄免费观看视频 | 欧美一区二区三区一在线观看 | 四虎永久免费黄色影片 | 精品福利在线 | 亚洲一级黄色 | 欧美三级在线 |