InnoDB的4個特性

innodb 的四個特性
insert buffer
innodb使用insert buffer"欺騙"數據庫:對於爲非惟一索引,輔助索引的修改操做並不是實時更新索引的葉子頁,而是把若干對同一頁面的更新緩存起來作合併爲一次性更新操做,轉化隨機IO 爲順序IO,這樣能夠避免隨機IO帶來性能損耗,提升數據庫的寫性能。
1.1 原理:
   a 先判斷要更新的這一頁在不在內存中。
   b 若是不在,則讀取index page 存入Insert Buffer,按照Master Thread的調度規則來合併不是惟一索引和索引頁中的葉子結點.
Double write 
Double write 是InnoDB在 tablespace上的128個頁(2個區)是2MB;
其原理:
    爲了解決 partial page write 問題 ,當mysql將髒數據flush到data file的時候, 先使用memcopy 將髒數據複製到內存中的double write buffer ,以後經過double write buffer再分2次,每次寫入1MB到共享表空間,而後立刻調用fsync函數,同步到磁盤上,避免緩衝帶來的問題,在這個過程當中,doublewrite是順序寫,開銷並不大,在完成doublewrite寫入後,在將double write buffer寫入各表空間文件,這時是離散寫入。
若是發生了極端狀況(斷電),InnoDB再次啓動後,發現了一個Page數據已經損壞,那麼此時就能夠從doublewrite buffer中進行數據恢復了。
位於共享表空間上的double write buffer實際上也是一個文件,寫DWB會致使系統有更多的fsync操做, 而硬盤的fsync性能, 因此它會下降mysql的總體性能. 可是並不會下降到原來的50%. 這主要是由於: 
1) double write 是一個鏈接的存儲空間, 因此硬盤在寫數據的時候是順序寫, 而不是隨機寫, 這樣性能更高. 
2) 將數據從double write buffer寫到真正的segment中的時候, 系統會自動合併鏈接空間刷新的方式, 每次能夠刷新多個pages;
 
自適應哈希
MySQL的Heap存儲引擎默認的索引類型爲哈希
而InnoDB存儲引擎提出了另外一種實現方法,自適應哈希索引(adaptive hash index)。
  InnoDB存儲引擎會監控對錶上索引的查找,若是觀察到創建哈希索引能夠帶來速度的提高,則創建哈希索引,因此稱之爲自適應(adaptive)的。
自適應哈希索引經過緩衝池的B+樹構造而來,所以創建的速度很快。並且不須要將整個表都建哈希索引,InnoDB存儲引擎會自動根據訪問的頻率
限制
1.只能用於等值比較,例如=, <=>,in
2.沒法用於排序
3.有衝突可能
4.Mysql自動管理,人爲沒法干預。
read-ahead預期
InnoDB read-ahead
InnoDB 提供了兩種預讀的方式,一種是 Linear read ahead,由參數innodb_read_ahead_threshold控制,當你連續讀取一個 extent 的 threshold 個 page 的時候,會觸發下一個 extent 64個page的預讀。另一種是Random read-ahead,由參數innodb_random_read_ahead控制,當你連續讀取設定的數量的page後,會觸發讀取這個extent的剩餘page。
 
InnoDB 的預讀功能是使用後臺線程異步完成的。InnoDB啓動了innodb_read_io_threads個後臺線程,
相關文章
相關標籤/搜索