InnoDB引擎邏輯存儲結構及架構

簡化理解版

想象 InnoDB 是一個高效運轉的倉庫:

  1. 核心內存區 (大腦 & 高速緩存 - 干活超快的地方)

    • 緩沖池?Buffer Pool?(最最核心!):

      • 作用:?相當于倉庫的“高頻貨架”。把最常用的數據(表數據、索引)從慢速的磁盤提前搬到快速的內存里。下次要用直接拿,不用跑遠路去磁盤。

      • 好處:?讀寫速度飛起!是 InnoDB 快的關鍵。

    • 日志緩沖區?Log Buffer

      • 作用:?一個小型“臨時筆記本”。記錄對數據的修改操作(增刪改)📝,寫滿一本(或定時)就交給“歸檔員”寫到磁盤的大賬本里。

      • 好處:?避免頻繁寫慢速磁盤,先攢著一起寫,效率高。

  2. 磁盤結構 (倉庫本體 & 賬本 - 持久存儲的地方)

    • 表空間?Tablespaces?(數據大本營):

      • 作用:?磁盤上真正存放你表的數據(.ibd文件)和索引的大容器。想象成倉庫的貨架和貨位規劃圖。

      • 類型:?系統表空間(ibdata1,存一些公共信息)、獨立表空間(每個表有自己的.ibd文件,主流)、臨時表空間等。

    • 重做日志?Redo Log?(救命賬本 -?ib_logfile0,?ib_logfile1):

      • 作用:?一個循環寫的“操作流水賬”。記錄所有修改操作本身(比如“把A記錄字段X從1改成2”)。萬一倉庫突然停電(崩潰),靠這個賬本能精確重做一遍沒來得及存到貨架的操作,保證數據不丟。

      • 關鍵點:?順序寫、速度快,是崩潰恢復的核心保障。

    • 撤銷日志?Undo Log?(后悔藥記錄):

      • 作用:?記錄修改前的舊數據版本📜。用來做兩件事:

        • 事務回滾(后悔了,撤銷操作)。

        • 實現多版本并發控制MVCC(讓不同人看到不同時刻的數據快照,互不干擾)。

  3. 線程們 (倉庫工人 - 各司其職干活的):

    • 主線程?Master Thread?總管,協調其他工人,負責后臺任務(比如定期刷臟頁到磁盤、合并插入緩沖等)。

    • IO線程:?專門負責讀寫磁盤(讀數據頁到緩沖池、寫日志緩沖區到重做日志文件、寫臟頁數據到表空間等)。分讀線程和寫線程。

    • 清理線程?Purge Thread?專門回收那些已經沒人需要的舊版本數據(由Undo Log產生的)。

    • 頁面清理線程?Page Cleaner Thread?專門負責把緩沖池里被修改過但還沒寫回磁盤的“臟數據頁”刷回磁盤。

最簡化記憶框架:

  1. 內存干活快:?緩沖池(緩存數據) +?日志緩沖區(攢操作記錄)。

  2. 磁盤存永久:?表空間(存數據文件) +?重做日志(崩潰恢復賬本) +?撤銷日志(回滾/MVCC)。

  3. 線程來協作:?主線程(總管) +?IO線程(搬磁盤) +?清理線程(收垃圾) +?頁面清理(刷臟頁)。

關鍵互動流程簡化版:

  1. 你執行一個UPDATE語句。

  2. InnoDB 先去緩沖池找這條數據在不在內存。

    • 在:直接改內存里的數據(現在它是“臟頁”了)。

    • 不在:先讓IO線程表空間文件讀到緩沖池,再改。

  3. 把“改了哪條數據,怎么改的”這個操作記錄寫到日志緩沖區

  4. 日志緩沖區滿了(或事務提交時),IO線程把這一批操作記錄快速順序寫入重做日志redolog文件(磁盤)。

  5. 后臺頁面清理線程會在合適的時候,把緩沖池里改過的“臟頁”慢慢寫回表空間文件(磁盤)。

  6. 如果改錯了或者事務回滾,撤銷日志undolog里記錄了舊值,可以恢復。

  7. 如果突然斷電,重啟時,InnoDB 會檢查重做日志,把那些已經記錄在日志里(說明操作有效)但還沒寫回數據文件的操作重做一遍,保證數據不丟。

一句話總結核心:

InnoDB 靠?緩沖池?在內存里飛快干活,用?重做日志?保證數據安全不丟,靠?表空間?存數據文件,撤銷日志?支持回滾和多版本讀,各種?線程?默默協作完成所有后臺任務。

InnoDB引擎邏輯存儲結構

架構

1,內存結構

2,磁盤結構

?

3,后臺線程

將緩沖池中的數據在合適的時間刷新到磁盤中

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

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

相關文章

貧血模型與充血模型:架構設計的分水嶺

在企業級應用的架構設計中,貧血模型和充血模型一直是架構師們爭論的熱點話題。兩者背后分別代表著“事務腳本模式”和“領域模型模式”兩種截然不同的設計思想。而理解這兩者的差異,有助于開發者根據實際業務場景做出更合理的架構決策。 貧血模型&#…

Linux的調試器--gbd/cgbd

1.引入 #include <stdio.h> int Sum(int s, int e) {int result 0;for(int i s; i < e; i){result i;}return result; } int main() {int start 1;int end 100;printf("I will begin\n");int n Sum(start, end);printf("running done, result i…

PPIO × AstrBot:多平臺接入聊天機器人,開啟高效協同 | 教程

在消息平臺接入專屬聊天機器人&#xff0c;能快速生成精準答案&#xff0c;與項目管理、CRM等系統集成后&#xff0c;機器人還能根據任務進展自動建群、推送進度提醒&#xff0c;并精準相關人員&#xff0c;實現信息的高效傳遞。 AstrBot 是一個多平臺聊天機器人及開發框架&…

HAProxy 可觀測性最佳實踐

HAProxy 簡介 HAProxy&#xff08;High Availability Proxy&#xff09;是一款廣泛使用的高性能負載均衡器&#xff0c;支持 TCP 和 HTTP 協議&#xff0c;提供高可用性、負載均衡和代理服務。它特別適用于負載較大的 Web 站點&#xff0c;能夠支持數以萬計的并發連接&#xf…

增強LangChain交互體驗:消息歷史(記憶)功能詳解

背景 在構建聊天機器人時,將對話狀態傳入和傳出鏈至關重要。 LangGraph 實現了內置的持久層,允許鏈狀態自動持久化在內存或外部后端(如 SQLite、Postgres 或 Redis)中。在本文我們將演示如何通過將任意 LangChain runnables 包裝在最小的 LangGraph 應用程序中來添加持久性…

EasyRTC音視頻實時通話助力微信小程序:打造低延遲、高可靠的VoIP端到端呼叫解決方案

一、方案概述? 在數字化通信浪潮下&#xff0c;端到端實時音視頻能力成為剛需。依托龐大用戶生態的微信小程序&#xff0c;是實現此類功能的優質載體。基于WebRTC的EasyRTC音視頻SDK&#xff0c;為小程序VoIP呼叫提供輕量化解決方案&#xff0c;通過技術優化實現低延遲通信&a…

WebVm:無需安裝,一款可以在瀏覽器運行的 Linux 來了

WebVM 是一款可以在瀏覽器中運行的Linux虛擬機。不是那種HTMLJavaScript模擬的UI&#xff0c;完全通過HTML5/WebAssembly技術實現客戶端運行。通過集成CheerpX虛擬化引擎&#xff0c;可直接在瀏覽器中運行未經修改的Debian系統。 Stars 數13054Forks 數2398 主要特點 完整 Lin…

CesiumInstancedMesh 實例

CesiumInstancedMesh 實例 import * as Cesium from cesium;// Three.js 風格的 InstancedMesh 類, https://threejs.org/docs/#api/en/objects/InstancedMesh export class CesiumInstancedMesh {/*** Creates an instance of InstancedMesh.** param {Cesium.Geometry} geom…

創建型模式之Abstract Factory(抽象工廠)

創建型模式之Abstract Factory&#xff08;抽象工廠&#xff09; 摘要&#xff1a; 本文介紹了抽象工廠模式&#xff08;Abstract Factory&#xff09;&#xff0c;它是一種創建型設計模式&#xff0c;提供了一種創建一系列相關對象的接口而無需指定具體類。文章通過手機工廠示…

多卡訓練核心技術詳解

多卡訓練核心技術詳解 多卡訓練 主要圍繞分布式環境初始化、模型并行化、數據分片和梯度同步展開。下面結合您的代碼,詳細解釋這些核心部分: 并行執行命令 torchrun --nproc_per_node=5 TokenLossMulCard.py 1. 分布式環境初始化 def init_distributed():init_process_…

OpenCV---minAreaRect

一、基本概念與用途 minAreaRect是OpenCV中用于計算點集的最小面積旋轉矩形的函數。在計算機視覺領域&#xff0c;它常被用于&#xff1a; 目標檢測中獲取傾斜對象的邊界框&#xff08;如傾斜的車牌、文本行、工業零件&#xff09;形狀分析與識別&#xff08;如確定物體的主方…

高端裝備制造企業如何選擇適配的項目管理系統提升項目執行效率?附選型案例

高端裝備制造項目通常涉及多專業協同、長周期交付和高風險管控&#xff0c;因此系統需具備全生命周期管理能力。例如&#xff0c;北京奧博思公司出品的 PowerProject 項目管理系統就是一款非常適合制造企業使用的項目管理軟件系統。 國內某大型半導體裝備制造企業與奧博思軟件達…

如何科學測量系統的最高QPS?

要準確測量系統的最高QPS&#xff08;Queries Per Second&#xff09;&#xff0c;既不能簡單依賴固定請求數&#xff08;如2萬次&#xff09;&#xff0c;也不能盲目壓到服務器崩潰。以下是專業的方法論和步驟&#xff1a; 1. 核心原則 目標&#xff1a;找到系統在穩定運行&a…

HTML5實現簡潔的端午節節日網站源碼

HTML5實現簡潔的端午節節日網站源碼 前言一、設計來源1.1 網站首頁界面1.2 端午由來界面1.3 節日活動界面1.4 傳統美食界面1.5 民俗文化界面1.6 登錄界面1.7 注冊界面 二、效果和源碼2.1 動態效果2.2 源代碼 結束語 HTML5實現簡潔的端午節節日網站源碼&#xff0c;酷炫的大氣簡…

使用 `\033` 方式設置終端字體顏色

通過 ANSI 轉義序列(以八進制 \033 開頭 ,十進制 27 ),我們可以在支持的終端中輕松實現這一功能。本文將詳細介紹如何使用 \033 設置字體顏色,并提供 C、C++ 和 Python 的示例代碼。 什么是 ANSI 轉義序列? ANSI 轉義序列是一組特殊的字符序列,用于控制終端的顯示屬性…

脫發因素機器學習數據分析

脫發因素機器學習數據分析 一、背景描述 隨著年齡增長&#xff0c;脫發成為影響外貌與健康的重要問題。 本數據集包含遺傳、荷爾蒙變化、醫療狀況、藥物治療、營養缺乏、心理壓力等12個可能導致脫發的因素&#xff0c; 旨在通過數據分析挖掘各因素與脫發的潛在關聯&#xf…

React 第四十八節 Router中 useMatch 的使用詳細介紹及案例分析

前言 useMatch 是 React Router 中的一個鉤子&#xff0c;用于判斷當前 URL 路徑是否與指定模式匹配&#xff0c;并返回匹配的詳細信息。 它常用于動態路由參數提取、條件渲染和導航高亮等場景。 一、useMatch 核心功能 路徑匹配檢測&#xff1a;判斷當前路徑是否符合指定模…

ubuntu mysql 8.0.42 基于二進制日志文件位置和GTID主從復制配置

目錄 1 操作系統信息 2 MySql數據庫版本 3 主機列表 4 MySQL服務器都安裝依賴 5 主庫服務器安裝mysql軟件步驟&#xff1a; 6 從服務器安裝mysql軟件步驟 7 基于二進制日志文件位置的主從復制配置 8 使用全局事務標識符進行主從復制(GTID) 9 部署過程遇到問題 1 操作系…

鴻蒙OSUniApp滑動鎖屏實戰:打造流暢優雅的移動端解鎖體驗#三方框架 #Uniapp

UniApp滑動鎖屏實戰&#xff1a;打造流暢優雅的移動端解鎖體驗 引言 移動應用的安全性和用戶體驗是開發中不可忽視的重要環節。滑動鎖屏作為一種直觀、安全且用戶友好的解鎖方式&#xff0c;在移動應用中得到廣泛應用。本文將深入探討如何使用UniApp框架實現一個功能完備、動…

專場回顧 | 重新定義交互,智能硬件的未來設計

自2022年起&#xff0c;中國智能硬件行業呈現出蓬勃發展的態勢&#xff0c;市場規模不斷擴大。一個多月前&#xff0c;“小智AI”在短視頻平臺的爆火將智能硬件帶向了大眾視野&#xff0c;也意味著智能硬件已不再僅僅停留在概念和技術層面&#xff0c;而是加速邁向實際落地應用…