InnoDB體系架構詳解
阿新 • • 發佈:2019-01-22
InnoDB的架構由記憶體池和後臺執行緒構成,架構圖如圖所示
(1)記憶體根據分工以及儲存檔案的不同分為緩衝池、重做日誌緩衝、額外記憶體池:
- 緩衝池:InnoDB引擎是基於磁碟儲存的,並將其中的記錄按照頁的方式進行管理。由於磁碟IO的速度感人,為了提高資料庫的整體效能,在記憶體中劃了一塊區域作為緩衝池。資料庫讀取頁時,首先將從磁碟讀到的頁存放在緩衝池中。下次再讀相同頁時,首先判斷該頁是否在緩衝池中。若在緩衝池中,稱該頁被命中,直接讀取緩衝池中的頁。否則,讀取磁碟上的頁,由此提高了讀取的速度。資料庫修改資料操作時,首先修改在緩衝池的頁,然後再非同步重新整理到磁碟上,從而提高改資料的速度。緩衝池中快取的資料頁型別有:索引頁、資料頁、undo頁、插入緩衝、自適應雜湊索引、InnoDB儲存的鎖資訊、資料字典資訊等。
- 重做日誌緩衝:InnoDB首先將重做日誌資訊放到這個緩衝區,然後按照一定頻率將其重新整理到重做日誌檔案。預設1秒鐘重新整理一次,因此重做日誌緩衝一般不需要很大,預設8M。日誌在下列3種情況下會重新整理重做日誌緩衝:(1)每秒將重做日誌緩衝重新整理到重做日誌檔案(2)每個事務提交時會將重做日誌緩衝重新整理到重做日誌檔案(3)當重做日誌緩衝池剩餘空間小於1/2時,重做日誌緩衝重新整理到重做日誌檔案。
- 額外的記憶體池:在InnoDB儲存引擎中,對記憶體的管理是通過一種稱為記憶體堆的方式進行的。在對一些資料結構本身的記憶體進行分配時,需要從額外的記憶體池中進行申請。
(2)後臺執行緒根據功能不同分為master Thread、IO Thread、Purge Thread、Page Cleaner Thread:
- Master Thread:負責將緩衝池中的資料非同步重新整理到磁碟,保證資料的一致性,包括髒頁的重新整理、合併插入緩衝、UNDO夜的回收等。
- IO Thread:在InnoDB儲存引擎中大量使用非同步 IO處理IO請求以提高資料庫的效能,IO Thread負責這些IO請求的回撥處理。IO Thread 有4類,分別為write、read、insert buffer、log IO thread。
- Purge Thread:由於回收不再需要的undo頁。
- Page Cleaner Thread:將緩衝池中髒頁(即被修改過於磁碟中資料不一致的頁)重新整理到磁碟中。