1、插入緩衝(insert buffer)
對於非聚集索引頁的插入或更新操作,不是每一次直接插入到索引頁中,而是先判斷插入的非聚集索引頁是否在緩衝池中,若在則直接插入;若不在則先放入到乙個insert buffer物件中。看似資料庫這個非聚集的索引已經插入到葉子節點,實際並沒有,只是存放在另乙個位置。然後再以一定的頻率和情況進行insert buffer和輔助索引頁子節點的merge操作,這時通常能將多個插入合併到乙個操作中(因為在乙個索引頁中),這就大大提高另對於非聚集索引的插入的效能。
insert buffer使用的兩個條件:
1)索引是輔助索引
2)索引不是唯一索引
innodb從1.0.x版本開始引入change buffer,可將其視為insert buffer的公升級。對於dml操作–insert、delete、update都進行緩衝。適用物件依然是非唯一的輔助索引。
2、兩次寫(double write)
doublewrite由兩部分組成,一部分是記憶體中的doublewrite buffer,大小2m,另一部分是物理磁碟上共享表空間中連續的128個頁,即兩個去(extent),大小同樣為2m。在對緩衝池的髒頁進行重新整理時,並不直接寫磁碟,而是會通過memcpy函式將髒頁先複製到記憶體中的doublewrite buffer,之後通過doublewrite buffer再分兩次,每次1m順序的寫入共享表空間的物理磁碟上,然後馬上呼叫fsync函式,同步磁碟,避免緩衝寫帶來的問題。這個過程因為doublewrite頁是連續的,所以是順序寫的,開銷不大。
如果作業系統在將頁寫入磁碟的過程中發生了崩潰,在恢復過程中,innodb儲存引擎可以從共享表空間中的doublewrite中找到該頁的乙個副本,將其複製到表空間檔案,再應用重做日誌。
3、自適應雜湊索引(adaptivve hash index)
innodb儲存引擎會監控對錶上各索引頁對查詢。如果觀察到建立雜湊索引可以帶來速度提公升,則建立雜湊索引,稱之為自適應雜湊索引ahi。ahi通過緩衝池的b+樹頁構造而來,因此建立的速度非常快,而且不需要對整張表構建雜湊索引。innodb儲存引擎會自動根據訪問對頻率和模式來自動地為某些熱點頁建立雜湊索引。
ahi有乙個要求,即對這個頁對連續訪問模式必須是一樣的。訪問模式一樣是指查詢的條件一樣,若進行交替的兩種查詢,那麼innodb儲存引擎不會對該頁構造ahi,此外ahi還有如下要求:
1)以該模式訪問100次
2)頁通過該模式訪問了n次,其中n=頁中記錄*1/16
4、非同步io(async io)
5、重新整理鄰接頁(flush neighbor page)
InnoDB關鍵特性
innodb使用insert buffer 欺騙 資料庫 對於為非唯一索引,輔助索引的修改操作並非實時更新索引的葉子頁,而是把若干對同一頁面的更新快取起來做合併為一次性更新操作,轉化隨機io 為順序io,這樣可以避免隨機io帶來效能損耗,提高資料庫的寫效能。ibuf pool size per ma...
innodb 關鍵特性
插入緩衝 innodb儲存引擎對於非聚集索引的插入或更新操作,不是每一次直接插入到索引頁中,而是先判斷插入的非聚集索引頁是否在緩衝池,若在,則直接插入 不在,則先放在乙個insert buffer物件中。資料庫這個非聚集的索引已經插到葉子節點,而實際並沒有,知識存放在另乙個位置。然後再以一定的頻率和...
InnoDB關鍵特性之double write
一 髒頁刷盤風險 關於io的最小單位 1 資料庫io的最小單位是16k mysql預設,oracle是8k 2 檔案系統io的最小單位是4k 也有1k的 3 磁碟io的最小單位是512k 因此,存在io寫入導致page損壞的風險 二 doublewrite 兩次寫 提高innodb的可靠性,用來解決...