1、InnoDB 體系架構簡述
InnoDB 存儲引擎架構分爲兩部分:
一個是InnoDB內存結構
-
緩衝池(Buffer Pool)
-
變更緩衝區(Change Buffer)
-
自適應Hash索引(Adaptive Hash Index)
-
日誌緩衝區(Log Buffer)
一個是InnoDB磁盤結構
-
表結構(Tables)
-
表索引(Indexes)
-
表空間(Tablespaces)
-
雙寫緩衝區(Doublewrite Buffer)
-
重做日誌(Redo Log)
-
撤銷日誌(Undo Logs)
InnoDB 存儲引擎採用了後寫機制(還有人稱爲日誌先行策略),也就是說當對數據進行修改時,先記錄在內存中,然後由數據庫線程刷新到磁盤文件。
事務的操作就會記錄成 Redo Log (重做日誌),然後轉換爲順序的IO來提交事務。也就是說當事務記錄到日誌中之後,就表示事務已經完成了,會立即返回信息給用戶。實際上,數據的操作可能還在內存中,並沒有刷新到磁盤。所以,如果這時機器出現故障,那麼這部分數據就會丟失。
InnoDB 存儲引擎通過 Redo Log 來保證數據的一致性。有人會說那就保存所有的 Redo Log 不就萬無一失了,這樣系統出現故障或者崩潰後,根據日誌重建數據,很顯然這樣是理想狀態。InnoDB 存儲引擎爲了解決這個問題,引入了檢查點機制,通過定時檢查,可以保證在檢查點之前的日誌都寫入磁盤,只會丟失一小部分數據。那麼這些機制具體是怎麼運轉的呢,小編會另起文章詳細參數。下面先上兩張圖,從整體上看一下 InnoDB 存儲引擎的架構,後文會對其進行分解闡述。
官網的InnoDB 存儲引擎圖:
下圖是網上找到的InnoDB 存儲引擎架構圖,很遺憾最終沒有找到出處,感謝繪製這張圖的作者。