Mysql:InnoDB 關鍵特性

目錄

一、插入緩沖(Change Buffer)→ 快遞驛站的 “臨時存放區”

二、兩次寫(Double Write)→ 重要文件的 “備份存檔”

三、自適應哈希索引(AHI)→ 圖書館的 “熱門書快捷查找區”

四、異步 IO(AIO)→ 餐廳的 “批量備菜”

五、刷新鄰接頁(Flush Neighbor Page)→ 打掃衛生 “順手擦相鄰桌子”

六、總結:每個特性都是 “為了解決某類性能 / 可靠性痛點”


一、插入緩沖(Change Buffer)→ 快遞驛站的 “臨時存放區”

場景類比
小區門口的快遞驛站,每天收大量同小區的快遞(對應 “非聚集索引的插入 / 更新”)。驛站不會每收到一個快遞,就立刻送到用戶家(對應 “直接寫輔助索引頁到磁盤”)—— 這樣太折騰,效率低。

而是先把快遞存在驛站倉庫(Insert Buffer),等以下情況再批量送:

  • 業主來取其他快遞時,順路把同單元的快遞一起送(對應 “輔助索引頁被讀到緩沖池時,合并插入”);

  • 倉庫快滿了(Insert Buffer Bitmap 檢測到輔助索引頁空間不足);

  • 每天固定時間(Master Thread 定時任務),批量送一批快遞。

解決的問題
避免 “每次插輔助索引都要隨機寫磁盤”,把多次 “零散寫” 變成 “批量寫”,提升寫入性能(尤其是寫密集場景)。

限制
只有 “非唯一輔助索引” 才適用 —— 就像驛站只存 “同小區可批量送的快遞”,如果是 “必須直接送到家的急件(唯一索引,需立即校驗唯一性)”,就不能放驛站。

二、兩次寫(Double Write)→ 重要文件的 “備份存檔”

場景類比
公司要保存一份重要合同(數據頁,16KB 大小),怕保存時突然斷電(數據庫宕機),導致 “合同只寫了前 4KB 就中斷(部分寫失效)”。

于是流程變成:

  1. 先把合同完整復印一份,存到公司的 “公共存檔區”(doublewrite buffer 內存 + 共享表空間的 2MB 磁盤區域);

  2. 確認存檔成功后,再把合同正式存到 “部門文件夾”(各個表空間文件)。

如果存部門文件夾時斷電,重啟后先從 “公共存檔區” 把完整合同復制回來,再用重做日志(合同修改記錄)補全細節 —— 保證合同(數據頁)一定是完整的。

解決的問題
防止 “數據頁部分寫失效” 導致的損壞,是 InnoDB 數據可靠性的關鍵保障( redo 日志能修復 “內容錯誤”,但治不了 “頁本身損壞”,兩次寫負責先保 “頁的完整副本”)。

三、自適應哈希索引(AHI)→ 圖書館的 “熱門書快捷查找區”

場景類比
圖書館的書按分類(B + 樹)排列,但《Python 編程入門》特別火(熱點頁),每天被借幾百次。

圖書館管理員發現后,在入口處設 “熱門書快捷區”,直接標注 “《Python 編程入門》→ 3 樓第 5 排第 2 架”(哈希索引,O (1) 查找)。讀者不用按 “計算機類→編程類→Python 子類” 的 B + 樹層級找(3-4 次查詢),直接通過快捷區找到,速度快很多。

解決的問題
對 “熱點頁” 自動生成哈希索引,把 B + 樹的 “多層查詢” 變成 “一次哈希定位”,提升熱點數據的查詢性能。

智能之處

  • 只對 “訪問模式固定的熱點頁” 建哈希(比如反復用WHERE a=1查同一張表);

  • 自動監控訪問頻率(比如某頁被同模式訪問 100 次以上),不用 DBA 手動配置。

四、異步 IO(AIO)→ 餐廳的 “批量備菜”

場景類比
餐廳廚師要做三道菜,都需要番茄(對應三個 “讀數據頁” 的 IO 請求):

  • 同步 IO:做第一道菜時,去倉庫拿番茄;做第二道菜時,再去拿;做第三道菜時,又去拿(三次 IO,每次等倉庫回應)。

  • 異步 IO:廚師一次性告訴助手 “把三道菜的番茄都拿來”(合并 IO 請求),助手去倉庫批量取(一次 IO 拿 48KB,覆蓋三個 16KB 的頁),效率更高。

解決的問題
把 “多次零散 IO” 合并成 “一次批量 IO”,提升磁盤 IOPS(每秒 IO 操作數),尤其適合 “連續讀相鄰頁” 的場景。

五、刷新鄰接頁(Flush Neighbor Page)→ 打掃衛生 “順手擦相鄰桌子”

場景類比
打掃辦公室時,發現桌子 A 臟了(臟頁要刷新到磁盤)。同步操作是 “只擦桌子 A”;而刷新鄰接頁是 “擦桌子 A 時,發現旁邊的桌子 B、C 也臟了,就一起擦了”。

這樣的好處:

  • 機械硬盤場景:減少 “反復尋道(找不同桌子位置)” 的時間,一次尋道擦多張桌子,效率高;

  • 固態硬盤場景:不需要尋道,所以 MySQL 1.2 后可通過innodb_flush_neighbors=0關閉(固態 IOPS 足夠,沒必要多擦)。

解決的問題
傳統機械硬盤下,利用 “鄰接頁一起刷” 減少尋道次數,提升批量刷臟頁的效率。

六、總結:每個特性都是 “為了解決某類性能 / 可靠性痛點”

  • 插入緩沖:解決 “輔助索引寫入頻繁導致的隨機寫性能差”;

  • 兩次寫:解決 “數據頁部分寫失效導致的可靠性問題”;

  • 自適應哈希:解決 “熱點頁查詢慢”;

  • 異步 IO:解決 “零散 IO 太多導致的效率低”;

  • 刷新鄰接頁:解決 “機械硬盤尋道次數多導致的刷盤慢”。

這些設計讓 InnoDB 在 “寫性能”“數據可靠性”“讀性能”“IO 效率” 上達到平衡,成為 MySQL 最常用的存儲引擎之一。

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

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

相關文章

STM32-----SPI

SPI簡介SCK:和I2C中SCL的時鐘線一個作用,都是在高電平拿出數據,在低電平寫數據MOSI:主機輸出從機輸入MISO:主機輸入從機輸出,只有當對應從機的SS為低電平,從機的MISO引腳才能設置推挽輸出,當從機SS為高電平時&#xff…

華為考試:HCIE數通考試難度分析

隨著信息技術的飛速發展,網絡技術已成為支撐各行各業運轉的重要基礎,市場對高水平網絡技術人才的需求持續增長。HCIE作為華為認證體系中的最高級別認證,代表了網絡技術領域的專業頂尖水平。本文將對HCIE數通認證的考試內容、難度及備考策略進…

一些常用的激活函數及繪圖

深度網絡的一些常用激活函數,并通過matplot繪制出來: import matplotlib.pyplot as plt import numpy as npdef relu(x):return np.maximum(0, x)def leaky_relu(x, alpha0.01):return np.where(x > 0, x, alpha * x)def gelu(x):return 0.5 * x * (1…

AE蘋果手機iPhone 17展示動畫片頭模板 App Promo Phone 17 Pro

專為 App 發布會、電商促銷、新品宣傳 打造的 iPhone 17 Pro 動畫展示 AE 模板。 4K 超清分辨率 26 張可替換照片位,無需第三方插件,拖拽即可輸出專業級手機宣傳片。 核心亮點 4K 超清:38402160 分辨率,大屏投放與社媒高清壓縮無…

基于Python的云原生TodoList Demo 項目,驗證云原生核心特性

以下是一個基于 Python 的云原生 TodoList Demo 項目,涵蓋 容器化、Kubernetes 編排、CI/CD、可觀測性、彈性擴縮容 等核心云原生特性,代碼簡潔且附詳細操作指南,適合入門學習。項目概覽 目標:實現一個支持增刪改查(CR…

go 日志的分裝和使用 Zap + lumberjack

自帶的log無法滿足 按大小輪轉 ,按天數清理舊日志 ,自動壓縮 ,限制備份數量 ,防止磁盤寫滿 ,生產環境推薦 等 使用 Zap lumberjack package mainimport ("go.uber.org/zap""go.uber.org/zap/zapcore&q…

【.Net技術棧梳理】01-核心框架與運行時(CLR)

文章目錄1 .NET Runtime(CLR-公共語言運行時)1.1 中間語言 IL1.1.1 從源代碼到通用中間語言(IL)1.1.2 運行時加載:CLR登場1.1.3 核心步驟:即時編譯 (JIT Compilation)1.1.4 執行與內存管理(GC&a…

Claude Code 平替:OpenAI發布 Codex CLI ,GPT-5 國內直接使用

openai推出的命令行編程工具codex已經可以使用最新 GPT-5 模型,擁有可媲美 Claude Code 的 AI 編碼能力。本文將指導你在 Windows 系統上部署原生的 Codex CLI 程序,并接入超低價中轉 API,讓你在國內直接用上超高性價比的 OpenAI Codex CLI 應…

在VS2022的WPF仿真,為什么在XAML實時預覽點擊 ce.xaml頁面控件,卻不會自動跳轉到具體代碼,這樣不方便我修改代碼,

在VS2022的WPF仿真,為什么在XAML實時預覽點擊 WpfApp1\FunctionalModule\08Replace\Replace.xaml頁面控件,卻不會自動跳轉到具體代碼,這樣不方便我修改代碼,

Git Bash 別名

有些常用的指令參數非常多,每次都要輸入好多參數,我們可以使用別名。Linux 系統中很多 shell,包括 bash,sh,zsh,dash 和 korn 等,不管哪種 shell 都會有一個 .bashrc 的隱藏文件,它就…

Centos7部署ceph存儲

一、準備5臺centos7主機 node節點雙網卡&#xff08;1個內部檢測&#xff0c;1個外部使用&#xff09;node節點都添加新網卡關閉防火墻和上下文都需要添加hosts文件都需要cat > /etc/hosts << EOF > 127.0.0.1 localhost localhost.localdomain localhost4 loca…

2025.9.10總結

今日感悟&#xff1a;刷到00后下班去菜市場撿菜的熱點視頻&#xff0c;確實挺有意思&#xff0c;不得不說&#xff0c;又省錢又好玩。雖然每天晚上能免費領個25塊錢的水果回去&#xff0c;但確實沒有什么新鮮感了。別人下班還能撿撿菜放松下&#xff0c;我下班&#xff0c;除了…

【數據結構與算符Trip第2站】稀疏數組

稀疏sparsearray數組 什么是稀疏數組&#xff1f; 稀疏數組是一種特殊的數據結構&#xff0c;用于高效存儲和表示大部分元素為零&#xff08;或默認值&#xff09;的數組。它通過只存儲非零元素的位置和值來節省內存空間。是一種壓縮數組。 實現原理 在Go語言中&#xff0c;稀疏…

Sub-GHz無線收發單片機,低功耗物聯網通信的硬件“基石”

隨著物聯網應用持續向規模化部署、廣域化覆蓋與高效化協同邁進&#xff0c; 作為IoT終端設備實現無線交互的核心通信單元之一——Sub-GHz無線收發單片機&#xff08;Sub-GHz射頻收發芯片與單片機高度集成&#xff09;已成為系統設計中進一步簡化外圍元件數量、縮小硬件體積、降…

用Typescript 的方式封裝Vue3的表單綁定,支持防抖等功能

在 Vue3 中結合 TypeScript 封裝表單綁定方案時&#xff0c;需要綜合考慮類型安全、功能擴展性和開發體驗。以下是一個包含防抖功能、支持多種表單控件、具備完整類型推導的封裝方案&#xff0c;全文約 2300 字&#xff1a; 方案設計思路 組合式函數封裝&#xff1a;使用 Vue3 …

中悅大華通過訂單日記實現流程重構之路

一、客戶背景 安徽中悅大華高速流體機械有限公司&#xff0c;成立于2023年&#xff0c;位于安徽省宣城市&#xff0c;是一家以從事電子設備制造為主的企業&#xff0c;在多年的商業經營中已成為業界翹楚。 在業務不斷壯大的過程中&#xff0c;面臨生產協作效率低&#xff0c;庫…

【Springboot】介紹啟動類和啟動過程

【Springboot】介紹啟動類和啟動過程【一】Spring Boot 啟動類的注解【1】核心注解&#xff1a;SpringBootApplication&#xff08;1&#xff09;?SpringBootConfiguration?&#xff1a;Spring容器會從該類中加載Bean定義&#xff08;2&#xff09;?EnableAutoConfiguration…

Gears實測室:第一期·音游跨設備性能表現與工具價值實踐

在音游品類中&#xff0c;《跳舞的線》以 “音樂與操作節奏深度綁定” 的玩法特性&#xff0c;對設備性能提出了特殊要求 —— 穩定的幀率與低延遲的渲染響應&#xff0c;直接影響玩家對音符時機的判斷&#xff0c;一旦出現卡頓或幀波動&#xff0c;易導致操作失誤&#xff0c;…

格式刷+快捷鍵:Excel和WPS表格隔行填充顏色超方便

有時候我們會對Excel或WPS表格的數據區域每隔一行填充一個底紋&#xff0c;便于閱讀和查看。可以使用條件格式搭配公式實現&#xff0c;也可以手動設置。通常手動設置的時候是先設置一行&#xff0c;然后再雙擊格式刷應用。可以有更快的方式&#xff1a;先設置一行底紋&#xf…

將現有Spring Boot項目作為模塊導入到另一個Spring Boot項目

將現有Spring Boot項目作為模塊導入到另一個Spring Boot項目的操作步驟如下&#xff1a;?項目結構調整?將待導入的項目文件夾復制到主項目的根目錄下修改子模塊目錄名保持命名規范&#xff08;如ms-xxx格式&#xff09;?父POM配置?在主項目的pom.xml中添加<modules>聲…