Mysql中InnoDB的體系結構:三大核心元件與儲存結構

Mysql中InnoDB的體系結構:三大核心元件與儲存結構

Mysql體系結構圖

Mysql中InnoDB的體系結構:三大核心元件與儲存結構

Mysql體系結構圖。png

三大核心架構

雙寫快取(double write buffer)

一種特殊檔案flush技術,帶給InnoDB儲存引擎的是資料頁的可靠性。

doublewrite buffer是InnoDB在表空間上的128個頁(2個區,extend1和extend2),大小是2MB。

在把頁寫到資料檔案之前,InnoDB先把它們寫到一個叫doublewrite buffer(雙寫緩衝區)的連續區域內,在寫doublewrite buffer完成後,InnoDB才會把頁寫到資料檔案的適當的位置。

如果在寫頁的過程中發生意外崩潰,InnoDB在稍後的恢復過程中在doublewrite buffer中找到完好的page副本用於恢復。

引入的原因:頁的大小16K,每次可以寫入4K,斷電等意外情況,mysql不能保證這個重新整理磁碟的原子性。

使用雙寫緩衝區功能,InnoDB / XtraDB首先將頁面寫入雙寫緩衝區,然後寫入資料檔案。

如果在資料檔案中發生部分頁面寫入,InnoDB / XtraDB將檢查恢復是否資料檔案中頁面的校驗和與doublewrite緩衝區中頁面的校驗和不同,因此將知道頁面是否已損壞或不。如果它已損壞,恢復過程將使用儲存在doublewrite緩衝區中的頁面來恢復正確的資料。

如果在doublewrite緩衝區中發生部分寫入,則原始頁面不受影響,可以與重做日誌一起使用以恢復資料。

自適應雜湊索引(adaptive hash index)

Innodb儲存引擎會監控對錶上二級索引的查詢,如果發現某二級索引被頻繁訪問,二級索引成為熱資料,建立雜湊索引可以帶來速度的提升。

簡單說就是

經常

使用的資料進行快取。

Buffer Pool

之前文章有詳細介紹,這裡只做簡單的介紹

是一塊記憶體區域,當資料庫操作資料的時候,把硬碟上的資料載入到buffer pool,不直接和硬碟打交道,操作的是buffer pool裡面的資料

資料庫的增刪改查都是在buffer pool上進行,和undo log/redo log/redo log buffer/binlog一起使用,後續會把資料刷到硬碟上

MySQL的儲存體系

Mysql中InnoDB的體系結構:三大核心元件與儲存結構

MySQL的儲存體系。png

頁中包含很多行記錄,通常頁為16kb

64個頁組成一個區

一個索引會生成2個段,一個葉子節點段(儲存葉子節點),一個非葉子節點段(儲存非葉子節點)。

表空間(多個頁的池子):每一個頁都對應著一個頁號,這個頁號由4個位元組組成,也就是32個位元位,所以一個表空間最多可以擁有2的32次方個頁,如果按照頁的預設大小16KB來算,一個表空間最多支援64TB的資料。