首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 體系架構深度解析:內存結構、後台線程、緩衝池管理與 Redo/Undo 機制

     編輯:MySQL 綜合教學

MySQL 體系架構深度解析:內存結構、後台線程、緩衝池管理與 Redo/Undo 機制

1. 整體架構圖

MySQL 由連接池、管理服務工具、SQL 接口、查詢分析器、優化器、緩衝區、插件式存儲引擎、物理文件組成。獨特的插件式架構使存儲引擎可熱插拔。

MySQL 體系架構 MySQL 內存結構

2. InnoDB 後台線程模型

默認 7 個後台線程(5.6+ 可配置):

  • 4 個 IO Thread:Insert Buffer、Log、Read、Write
  • 1 個 Master Thread:核心調度,最高優先級
  • 1 個 Lock 監控線程
  • 1 個 Error 監控線程
mysql> SHOW VARIABLES LIKE 'innodb_%io%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| innodb_read_io_threads | 4     |
| innodb_write_io_threads| 4     |
| innodb_io_capacity     | 200   |
| innodb_use_native_aio  | ON    |
+------------------------+-------+

3. Master Thread 四大循環

循環觸發條件核心任務
Loop (主循環)用戶活動頻繁每秒:刷日志、合併 Insert Buffer、刷 100 頁髒頁、無活動切換 Background Loop
Background Loop無用戶活動刷 100 頁髒頁直到條件滿足、合併 20 個 Insert Buffer、刪除無用 Undo、跳回主循環
Flush Loop需大量刷髒頁專注刷新髒頁到磁盤
Suspend Loop完全空閒掛起 Master Thread,等待事件喚醒

4. 關鍵磁盤 IO 參數

  • innodb_io_capacity:磁盤 IOPS 吞吐量基準值(默認 200),控制刷髒頁、合併 Insert Buffer 的頁數比例
  • innodb_max_dirty_pages_pct:髒頁比例上限(默認 75%),超過觸發強制刷盤
  • innodb_adaptive_flushing:自適應刷盤,根據 Redo 產生速度動態調整刷頁數

5. 緩衝池 三大鏈表管理

  • Free List:空閒頁
  • LRU List:最近最少使用,管理 Clean/Dirty 頁
  • Flush List:髒頁鏈表,按修改時間排序,供刷盤線程掃描

頁狀態轉換:Free → Clean (讀入) → Dirty (修改) → Clean (刷盤) → Free (淘汰)

6. Insert Buffer (Change Buffer)

  • 針對非唯一二級索引:判斷索引頁是否在緩衝池,不在則暫存 Insert Buffer,後台合併
  • 佔用緩衝池上限 1/2(可通過 IBUF_POOL_SIZE_PER_MAX_SIZE 調整為 1/3)
  • 唯一索引不能使用 Insert Buffer(需即時查重)

7. Doublewrite Buffer (雙寫緩衝)

防止頁寫入失效(Partial Write)導致數據損壞:

  1. 刷盤前,先將頁拷貝到共享表空間的 Doublewrite Buffer(內存)
  2. 再寫入共享表空間物理磁盤(連續寫,性能高)
  3. 最後寫入數據文件真實位置
  4. 崩潰恢復時:發現頁損壞 → 從 Doublewrite 恢復副本 → 再應用 Redo Log

公式:恢復數據 = 頁副本 + Redo Log

Doublewrite 流程

8. Redo Log vs Binlog 核心差異

維度Redo Log (InnoDB)Binlog (Server層)
記錄範圍僅 InnoDB 事務所有引擎 (MyISAM/InnoDB/...)
記錄內容頁物理修改邏輯 SQL (Statement/Row/Mixed)
寫入時機事務進行中持續寫入事務提交前一次性寫入
文件特性循環寫入,固定大小追加寫入,無限增長
用途崩潰恢復主從復制、時間點恢復

9. 關鍵啟動/關閉參數

  • innodb_fast_shutdown:0(全清理)、1(默認,刷髒頁)、2(僅存日志,啟動時恢復)
  • innodb_force_recovery:0~6 級強制恢復模式,數據損壞時嘗試導出數據
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved