首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 體系架構深度解析:插件式存儲引擎、InnoDB 核心組件、文件結構、索引算法、鎖機制、事務實現

     編輯:MySQL 資料庫相關知識

整體架構分層

+---------------------+
| 連接池 / 線程管理    |
+---------------------+
| 管理服務與工具       |
+---------------------+
| SQL 接口             |
+---------------------+
| 查詢分析器           |
+---------------------+
| 優化器               |
+---------------------+
| 緩存 (Query Cache)   |
+---------------------+
| 插件式存儲引擎 API   |
+----------+------------+
           |
   +-------+-------+-------+-------+
   | InnoDB | MyISAM | NDB | Memory | ...
   +-----------------------------+
           |
    物理文件 (數據、日志、配置、Socket、PID)

主流存儲引擎特性對比

引擎定位鎖粒度事務特色
InnoDBOLTP行鎖✅ ACIDMVCC、插入緩衝、二次寫、自適應哈希、預讀
MyISAMOLAP/只讀表鎖❌全文索引、壓縮表、.MYD/.MYI 分離
NDB Cluster高可用集群行鎖✅Share-nothing、內存為主、自動分片
Memory臨時/緩存表鎖❌Hash 索引、重啟數據丟失
Archive歸檔/日志行鎖❌zlib 壓縮 1:10、僅 INSERT/SELECT
Maria (Aria)MyISAM 替代行鎖❌緩存數據+索引、MVCC、崩潰安全

InnoDB 核心架構

後台線程(默認 7 個,新版擴展)

  • Master Thread(最高優先級):刷日志、合併插入緩衝、刷髒頁、清理 Undo、生成檢查點
  • 4× IO Thread:Read、Write、Insert Buffer、Log
  • Lock Monitor、Error Monitor

內存結構

  • Buffer Pool:核心緩存(數據頁、索引頁、Undo、插入緩衝、自適應哈希、鎖信息、數據字典),默認 128MB,建議 60-80% 物理內存。
  • Redo Log Buffer:重做日志先寫緩存,再按策略刷盤。
  • Additional Memory Pool:內部數據結構(5.6.3+ 合併入 Buffer Pool)。

關鍵特性機制

文件體系

特性核心原理解決問題
Insert Buffer非唯一輔助索引頁不在內存時,先寫 Insert Buffer 內存/磁盤,Master Thread 定期合併避免離散讀寫輔助索引,大幅提升寫入性能
Doublewrite刷盤前先寫共享表空間副本,再寫數據文件;崩潰恢復時用副本修復頁再 Redo防止部分寫導致頁損壞,保證頁級原子性
Adaptive Hash Index監控索引查找模式,熱點 B+Tree 頁自動建 Hash 索引等值查詢 O(1) 級加速
Change Buffer (5.5+)Insert Buffer 升級,支援 Delete/Update 緩衝擴展寫優化範圍
類別文件說明
參數文件my.cnf / my.ini啟動配置、內存結構大小、路徑
日志文件error.log、binlog、slow.log、general.log錯誤、二進制(復制/恢復)、慢查詢、通用查詢
Socket/PIDmysql.sock、mysqld.pid本地連接、進程 ID
表結構*.frm每表一個,存列定義、索引定義
InnoDB 表空間ibdata1 (系統表空間)、*.ibd (獨立表空間)數據、索引、插入緩衝、Undo、系統頁
Redo Logib_logfile0/1循環寫入,崩潰恢復核心

索引與算法

  • B+Tree:高扇出(通常 2-3 層),葉子節點存數據。聚簇索引按主鍵組織,輔助索引葉子存主鍵值(bookmark)。
  • 最左前綴原則:聯合索引 (a,b,c) 支援 a、a,b、a,b,c,不支援 b、c、b,c。
  • Hash 索引:自適應、僅等值查詢、Memory 引擎默認。
  • 二分查找:Page Directory 槽稀疏目錄,頁內定位行用二分。

鎖機制

  • MVCC:Read Committed 讀最新快照,Repeatable Read 讀事務開始快照(默認)。
  • 死鎖檢測:Wait-for Graph,權重小者回滾(trx_weight)。
  • 監控表:INFORMATION_SCHEMA.INNODB_TRX/LOCKS/LOCK_WAITS。

事務實現

  • Redo Log:物理頁修改記錄,保證**持久性**,崩潰前滾。
  • Undo Log:邏輯逆操作(INSERT→DELETE),保證**原子性/一致性**,回滾用,存放於 Undo Segment(系統表空間)。
  • Group Commit:多事務提交合併一次 fsync,提升吞吐。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
鎖類型相容性算法
Shared (S)S✅ S✅ X❌Record Lock(單行)
Exclusive (X)S❌ X❌Gap Lock(間隙)、Next-Key Lock(間隙+記錄)