一文了解mysql的三大核心元件雙寫緩存(double write buffer)、自适應哈希索引(adaptive hash index)、Buffer Pool。同時了解Mysql的存儲體系結構
一種特殊檔案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緩沖區中發生部分寫入,則原始頁面不受影響,可以與重做日志一起使用以恢複資料。
Innodb存儲引擎會監控對表上二級索引的查找,如果發現某二級索引被頻繁通路,二級索引成為熱資料,建立哈希索引可以帶來速度的提升。
簡單說就是把經常使用的資料進行緩存。
之前文章有詳細介紹,這裡隻做簡單的介紹
是一塊記憶體區域,當資料庫操作資料的時候,把硬碟上的資料加載到buffer pool,不直接和硬碟打交道,操作的是buffer pool裡面的資料
資料庫的增删改查都是在buffer pool上進行,和undo log/redo log/redo log buffer/binlog一起使用,後續會把資料刷到硬碟上
頁中包含很多行記錄,通常頁為16kb
64個頁組成一個區
一個索引會生成2個段,一個葉子節點段(存儲葉子節點),一個非葉子節點段(存儲非葉子節點)。
表空間(多個頁的池子):每一個頁都對應着一個頁号,這個頁号由4個位元組組成,也就是32個比特位,是以一個表空間最多可以擁有2的32次方個頁,如果按照頁的預設大小16KB來算,一個表空間最多支援64TB的資料。
擷取更多有價值的文章,讓我們一起成為架構師!
關注公衆号,可以讓你逐漸對MySQL以及并發程式設計有更深入的了解!
這個公衆号,無廣告!!!每日更新!!!