InnoDB的三個關鍵特性


InnoDB存儲引擎的三個關鍵特性:插入緩沖(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)。

1、插入緩沖(insert buffer)的原理:

  對於非聚集索引的插入和更新,不是每一次直接插入索引頁中,而是首先判斷插入的非聚集索引頁是否在緩沖池中,如果在,則直接插入,否則,先放入一個插入緩沖區中。好似欺騙數據庫這個非聚集的索引已經插入到葉子節點了,然后再以一定的頻率執行插入緩沖和非聚集索引頁子節點的合並操作,這時通常能將多個插入合並到一個操作中,這就大大提高了對非聚集索引執行插入和修改操作的性能。

  插入緩沖使用的條件:

  1、索引是輔助索引;

  2、索引不是唯一的;

2、兩次寫(double write)
  兩次寫給innodb帶來的是可靠性,主要用來解決部分寫失敗(partial page write)doublewrite有兩部分組成,一部分是內存中的doublewrite buffer,大小為2M,另外一部分就是物理磁盤上的共享表空間中連續的128個頁,即兩個區,大小同樣為2M。當緩沖池的脹業刷新時,並不直接寫硬 盤,而是通過memcpy函數將臟頁先拷貝到內存中的doublewrite buffer,之后通過doublewrite buffer再分兩次寫,每次寫入1M到共享表空間的物理磁盤上,然后馬上調用fsync函數,同步磁盤。如下圖所示

 

以下命令可以查看doublewrite的使用 情況。

mysql> show global status like 'innodb_dblwr%';

slave上可以通過設置skip_innodb_doublewrite參數關閉兩次寫功能來提高性能,但是master上一定要開啟此功能,保證數據 安全。

3、自適應哈希索引(adaptive hash index)
  由於innodb不支持hash索引,但是在某些情況下hash索引的效率很高,於是出現了 adaptive hash index功能,innodb存儲引擎會監控對表上索引的查找,如果觀察到建立hash索引可以提高性能的時候,則自動建立hash索引。可以通過 show engine innodb status\G來查看自適應哈西索引的使用情況。可以使用innodb_adaptive_hash_index來禁用和啟用hash索引,默認開啟。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM