InnoDB架構,一幅圖秒懂

網上寫MySQL架構的文章比較多,寫InnoDB架構的文章比較少,今天簡單說說InnoDB架構。

畫外音:一分鐘,一幅圖,秒懂。

MySQL簡要架構是怎麼樣的?

InnoDB架構,一幅圖秒懂

MySQL整體分為三層:

(1)客戶端,是各種編程語言的connector;

(2)MySQL服務,內部包含各種組件,實現各種功能;

(3)文件系統,數據存儲與日誌;

其中,MySQL服務內,可以以插件的形式,實現各種存儲引擎。

在InnoDB,MyISAM,Memory…等各種存儲引擎中,InnoDB是使用範圍最廣的

畫外音:事務,行鎖,聚集索引,MVCC…眾多特性讓InnoDB備受青睞。

InnoDB簡要架構是怎麼樣的?

InnoDB架構,一幅圖秒懂

InnoDB整體也分為三層:

(1)內存結構(In-Memory Structure),這一層在MySQL服務進程內;

(2)OS Cache,這一層屬於內核態內存;

(3)磁盤結構(On-Disk Structure),這一層在文件系統上;

這三層的交互有兩類:

(1)通過OS Cache落地數據(上圖中,兩個短箭頭);

(2)直接O_Direct落地數據(長途中,長箭頭);

畫外音:這是一個性能與一致性折衷的設計。

InnoDB內存結構包含哪些核心組件?

InnoDB內存結構包含四大核心組件,分別是:

(1)緩衝池(Buffer Pool);

(2)

寫緩衝(Change Buffer);

(3)自適應哈希索引(Adaptive Hash Index);

(4)日誌緩衝(Log Buffer);

恰好,這四大核心組件,今年都詳細的寫過。

緩衝池(Buffer Pool)

目的是提升InnoDB性能,加速讀請求,避免每次數據訪問都進行磁盤IO。

畫外音:和系統架構設計中緩存的功能有點像,避免每次訪問數據庫。

這裡面涉及的技術點包括:預讀,局部性原理,LRU,預讀失敗+緩衝池汙染,新生代老生代雙鏈LRU…細節參見《緩衝池(buffer pool),徹底懂了!》。

寫緩衝(Change Buffer)

目的是提升InnoDB性能,加速寫請求,避免每次寫入都進行磁盤IO。

畫外音:我C,這個牛逼,寫入居然都可以不進行磁盤IO?

細節參見《寫緩衝(change buffer),徹底懂了!》,這篇文章的細節原理,特別有意思。

自適應哈希索引(Adaptive Hash Index)

目的是提升InnoDB性能,加速讀請求,減少索引查詢的尋路路徑。

這裡面涉及的技術點包括:聚集索引,普通索引,哈希索引…細節參見《InnoDB到底支不支持哈希索引》。

日誌緩衝(Log Buffer)

目的是提升InnoDB性能,極大優化redo日誌性能,並提供了高併發與強一致性的折衷方案。

這裡面涉及的技術點包括:redo log作用,流程,三層架構,隨機寫優化為順序寫,次次寫優化為批量寫…細節參見《事務已提交,數據卻丟了,趕緊檢查下LogBuffer》。

InnoDB磁盤結構包含哪些核心組件?

主要包括日誌與表空間,其結構與原理比InnoDB內存結構更加複雜,如果大家感興趣,未來再撰文詳述。

InnoDB架構,一幅圖秒懂

一分鐘系列,希望大家對InnoDB架構,以及InnoDB內存結構的四大組件有了更系統性的瞭解。

知其然,知其所以然,希望大家有收穫。


分享到:


相關文章: