MySQL Doublewrite Buffer 有了解過嗎?

引言:在數據庫管理中,確保數據的完整性和一致性是至關重要的。然而,在持久化數據到磁盤的過程中,可能會遇到各種意外情況,如斷電或系統崩潰,從而導致部分數據寫入,而另一部分數據未能成功寫入,這就產生了部分頁面寫問題。MySQL 中的 InnoDB 存儲引擎為了解決這一問題,引入了 Doublewrite Buffer 機制。

題目

MySQL Doublewrite Buffer 有了解過嗎?

推薦解析

Doublewrite Buffer 這玩意是啥用呢?

我們都知道 innodb 默認一頁是 16K,而操作系統 Linux 內存頁是 4K,那么一個 innodb 頁對應 4 個系統頁。

所以 innodb 的一頁數據要刷盤等于需要寫四個系統頁,那假設一頁數據落盤的時候,只寫了一個系統頁 就斷電了,那 innodb 一頁數據就壞了,然后就 g 了,恢復不了。

即產生了部分頁面寫問題,因為寫 innodb 的一頁無法保證原子性,所以引入了 Doublewrite Buffer。

其實就是當 innodb 要將數據落盤的時候,先將頁數據拷貝到 Doublewrite Buffer 中,然后 Doublewrite Buffer 再刷盤到 Doublewrite Buffer Files,這時候數據已經落盤了。

然后再將數據頁刷盤到本該到文件上。

從這個步驟我們得知,數據是寫了兩次磁盤,所以這玩意叫 double write。

之所以這樣操作就是先找個地方暫存這次刷盤的完整數據,如果出現斷電這種情況導致的部分頁面寫而損壞原先的完整頁,可以從 Doublewrite Buffer Files 恢復數據。

但雖然是兩次寫,性能的話也不會低太多,因此數據拷貝到 Doublewrite Buffer 是內存拷貝操作,然后寫到 Doublewrite Buffer Files 也是批量寫,且是順序寫盤,所以整體而已,性能損失不會太多。

有了這玩意,在崩潰恢復的時候,如果發現頁損壞,就可以從 Doublewrite Buffer Files 里面找到頁副本,然后恢復即可。

工作流程

當執行寫操作(如INSERT、UPDATE或DELETE)時,MySQL 會首先將數據寫入雙寫緩沖區。接著,這些數據會被同步到 Doublewrite File 中,這一過程由后臺線程完成以確保數據持久性。一旦 Doublewrite File 中的數據被確認寫入磁盤,MySQL 就會將數據寫入實際的數據文件中。如果在寫操作過程中發生故障,MySQL 可以從 Doublewrite File 中恢復數據,因為這里的數據是完整的,可以用來修復損壞的數據文件,保證數據的完整性和一致性。

好處

1)數據完整性保障: Double Write Buffer確保了數據的完整性,即使在寫操作過程中發生故障,也能夠從Double Write Buffer中恢復數據。這種機制有效地防止了數據損壞或丟失,提高了數據庫的可靠性。

2)性能優化**:** 雖然Double Write Buffer會增加寫入操作的開銷,但它通過批量寫入和順序寫入的方式提高了性能。它允許后臺線程異步地將數據寫入Double Write Buffer和Double Write File,從而減少了寫操作對數據庫性能的影響。

3)減少碎片寫入: Double Write Buffer的使用減少了碎片寫入的可能性,因為它會將數據收集到一起批量寫入到Double Write File中。這有助于提高磁盤利用率和寫入效率。

4)提高恢復速度**:** 在數據庫恢復過程中,可以利用Double Write Buffer中的數據快速修復損壞的數據文件,而無需執行完整的數據恢復過程。這樣可以顯著縮短數據庫恢復的時間,減少業務中斷的風險。

其他補充

魚聰明 AI 的回答:

魚聰明 AI 地址:https://www.yucongming.com/

MySQL實現Double Write Buffer的方式是將數據首先寫入到內存中的Double Write Buffer中,然后再將其同步到磁盤上的Double Write File中。這個過程是由后臺線程完成的,確保數據的持久性和完整性。

除了Double Write Buffer,還有一些其他的方案可以提高寫入操作的性能和可靠性,例如:

  1. Write-Ahead Logging (WAL):WAL是一種常見的技術,通過先將修改操作記錄到日志文件中,然后再將其應用到數據文件中,來確保數據的持久性和完整性。WAL可以減少數據文件的隨機寫入,提高寫入性能。
  2. 數據頁級別的校驗和:一些數據庫系統在數據頁中添加校驗和,可以在寫入時檢測到數據頁的損壞,從而提高數據的完整性。
  3. 閃存緩沖區(Flashcache):一些數據庫系統使用閃存緩沖區來加速寫入操作。閃存緩沖區可以在內存和磁盤之間緩存數據,減少隨機寫入,提高寫入性能。
  4. 其他緩沖技術:還有一些其他的緩沖技術,如緩存寫入(Write-back Cache)和延遲寫入(Lazy Write),可以在一定程度上提高寫入性能,但需要權衡數據的持久性和性能之間的關系。

總的來說,Double Write Buffer是MySQL實現數據寫入的一種重要機制,但也可以結合其他方案來提高寫入性能和數據完整性。

歡迎交流

Double Write Buffer 屬于執行一條 SQL 語句的最后一個步驟,結合三個日志,可以去想一想執行流程,總共大概有 15 個流程,能夠完整答出來肯定是很加分的,在文末還剩三個問題,歡迎小伙伴在評論區留言!

1)Double Write Buffer的性能損失情況是如何評估的?在哪些情況下,性能損失可能會更為顯著?

2)Double Write Buffer如何與MySQL的日志系統(如redo log和binlog)相互作用?它們之間有什么區別和聯系?

3)對于高并發寫入的場景,Double Write Buffer可能會帶來哪些挑戰?有什么優化策略可以應對這些挑戰?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23798.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23798.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23798.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

揭秘!如何從精益生產轉向智能制造

企業在“工業4.0、智能制造、互聯網”等概念滿天飛的環境下迷失了方向,不知該如何下手,盲目跟風。 君不見,很多企業在“工業4.0、智能制造、互聯網”等概念滿天飛的環境下迷失了方向,不知該如何下手,盲目跟風&#xf…

D365 使用 X++ 設置采購行的財務維度組合

文章目錄 前言一、代碼 前言 使用 X 設置采購行的財務維度組合 一、代碼 PurchLine purchLine;DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;DimensionAttributeValue dimensionAttributeValue;DimensionAt…

2024下《系統集成項目管理工程師》50個高頻考點匯總!值得收藏

寶子們!5月軟考考完了,終于可以考系統集成了! 整理了50個高頻考點,涵蓋全書90%考點,先把這個存下!再慢慢看書,邊看書邊背這個 1、信息安全的基本要素有: (1&#xff09…

邁入智能新紀元:智慧機房運維系統引領行業變革

在數字化飛速發展的今天,機房作為信息時代的“心臟”,其穩定運行對于企業的業務連續性至關重要。然而,傳統的機房運維模式面臨著諸多挑戰,如響應速度慢、故障定位難、資源浪費大等問題。智慧機房運維系統,它將以智能化…

Java【問題 07】SSH不同版本使用jsch問題處理(7.4升級9.7及歐拉原生8.8)

SSH不同版本使用jsch問題處理 1.問題一2.問題二2.1 說明2.2 解決 3.問題三 1.問題一 # 1.系統 cat /etc/os-release # 系統信息 NAME"openEuler" VERSION"22.03 (LTS-SP1)" ID"openEuler" VERSION_ID"22.03" PRETTY_NAME"openEu…

nginx快速刪除一行

使用光標定位到要刪除的行,連續按兩次鍵盤上的字母d,則可刪除; 如果原先在編輯模式下,按esc鍵退出編輯模式,然后定位到要刪除的位,按2次d,則可快速刪除,刪除后想繼續編輯&#xff0…

延時任務工具類

自定義工具類 package com.sxfoundation.task;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.task.TaskRejectedException; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.spri…

重磅:吳恩達最新的機器學習書籍《Machine Learning Yearning》兩年磨一劍

《Machine Learning Yearning》是吳恩達歷時兩年打磨而成的機器學習和深度學習實踐寶典。這本書旨在為讀者提供實戰經驗,以幫助他們在機器學習項目中取得成功。 吳恩達通過自身多年的實踐經驗,為讀者提供了寶貴的指導,涵蓋了從項目構建到調試…

AndroidX Navigation 反復創建Fragment問題修復

目錄 解決辦法如何使用參考文檔解決辦法 自定義 FragmentNavigator,替換系統的,系統對應的 FragmentNavigator Key 為 "fragment",代碼如下,可直接拷貝使用。 import android.content.Context import android.util.Log import androidx.annotation.IdRes impor…

ts類型聲明文件、內置聲明文件

1. ts類型聲明文件 在ts中以d.ts為后綴的文件就是類型聲明文件,主要作用是為js模塊提供類型信息支持,從而獲得類型提示 1.1 第三方包用ts編寫的,會自動生成一個 .d.ts文件,進行類型聲明 1.2 有些包不是用ts編寫的,在…

【HashMap】CAS的定義及優缺點

CAS(Compare-And-Swap,比較并交換)是一種原子操作,用于實現無鎖(lock-free)的并發數據結構。它是現代處理器支持的一種硬件指令,能夠保證在多線程環境下進行變量更新時的原子性。CAS 操作包含三…

LangChain真的好用嗎?談一下LangChain封裝FAISS的一些坑

前言 最近在做一個知識庫問答項目,就是現在大模型浪潮下比較火的 RAG 應用。LangChain 可以說是 RAG 最受歡迎的工具,因此我首選 LangChain 來快速構建我的應用。坦白來講 LangChain 本身一套對于組件的定義已經讓我感覺很復雜,為什么采用 f…

Java Web學習筆記6——盒子模型

視頻標簽&#xff1a;<video> src: 規定視頻的URL controls&#xff1a;顯示播放控件 width&#xff1a;播放器的寬度 height&#xff1a;播放器的高度 音頻標簽&#xff1a;<audio> src: 規定音頻的URL controls: 顯示播放控件 段落標簽&#xff1a;<p&g…

npm yarn 更換國內源以及node歷史版本下載地址

npm 更換國內源 npm config set registryhttps://registry.npmmirror.com npm config set electron_mirrorhttps://registry.npmmirror.com/electron/yarn 更換國內源 yarn config set registry https://registry.npmmirror.comnode歷史版本下載地址 https://nodejs.org/dow…

Git版本控制:核心概念、操作與實踐

Git是一種分布式版本控制系統&#xff0c;被廣泛應用于軟件開發過程中。本文將介紹Git的核心概念、常用操作以及最佳實踐&#xff0c;幫助讀者掌握Git的基本技巧&#xff0c;提高團隊協作效率。 一、引言 在軟件開發過程中&#xff0c;版本控制是至關重要的。它能幫助我們跟蹤…

Flutter InAppWebView Unknown feature SUPPRESS_ERROR_PAGE

在使用InAppWebView的initialData加載html代碼的時候,出現java.lang.RuntimeException: Unknown feature SUPPRESS_ERROR_PAGE的出錯誤 E/MethodChannel#flutter/platform_views(16853): Failed to handle method call E/MethodChannel#flutter/platform_views(16853):<

linux驅動學習(七)之混雜設備

需要板子一起學習的可以這里購買&#xff08;含資料&#xff09;&#xff1a;點擊跳轉 一、混雜設備 混雜設備也叫雜項設備&#xff0c;是對普通的字符設備(struct cdev)的一種封裝,設計目的就是為了簡化字符設備驅動設計的流程。具有以下特點&#xff1a; 1) 主設備號為10&a…

全面解析:滲壓計數據如何預測地下水趨勢

隨著人們對水資源日益增長的需求和對環境保護意識的提升&#xff0c;地下水位的監測和預測成為了水利工程和環境科學領域的重要研究內容。滲壓計作為一種能夠測量土壤或巖石中孔隙水壓力的儀器&#xff0c;在地下水位的監測中發揮著關鍵作用。本文將從滲壓計的工作原理、安裝方…

初探富文本之基于虛擬滾動的大型文檔性能優化方案

初探富文本之基于虛擬滾動的大型文檔性能優化方案 虛擬滾動是一種優化長列表性能的技術&#xff0c;其通過按需渲染列表項來提高瀏覽器運行效率。具體來說&#xff0c;虛擬滾動只渲染用戶瀏覽器視口部分的文檔數據&#xff0c;而不是整個文檔結構&#xff0c;其核心實現根據可…

GD32F4XX的ISP方式下載程序時的串口選擇

官方資料 詳細信息可參考GD32F4xx的用戶手冊&#xff0c;第 1.4 章節 引導配置 。 版本是 &#xff1a;GD32F4xx_User_Manual_Rev3.0_CN 資料鏈接: https://www.gd32mcu.com/cn/download/6?kwGD32F4