天天看點

InnoDB關鍵特性Innodb關鍵特性

Innodb關鍵特性

文章目錄

  • Innodb關鍵特性
    • 插入緩沖
      • Insert Buffer
      • change buffer
    • 兩次寫
    • 自适應哈希索引
    • 異步IO
    • 重新整理鄰接頁

插入緩沖

Insert Buffer

概念:對于非聚集索引的插入或更新操作,先判斷插入的非聚集索引頁是否在緩沖池中,在則直接插入。不在,先放入到insert buffer對象中,在一定情況下對insert buffer和輔助索引頁子節點merge操作。 (可将多個插入合并到一個操作中,大大提高了對非聚集索引的插入性能)

使用需要滿足2個條件:

  • 索引是輔助索引
  • 索引不是唯一的 (因為insert buffer不查找索引頁判斷插入記錄唯一性)

通過

show engine innodb status

檢視Innodb引擎狀态,找到

INSERT BUFFER AND ADAPTIVE HASH INDEX

-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
 insert 0, delete mark 0, delete 0
discarded operations:
 insert 0, delete mark 0, delete 0
Hash table size 138389, node heap has 0 buffer(s)
Hash table size 138389, node heap has 1 buffer(s)
Hash table size 138389, node heap has 0 buffer(s)
Hash table size 138389, node heap has 1 buffer(s)
Hash table size 138389, node heap has 1 buffer(s)
Hash table size 138389, node heap has 1 buffer(s)
Hash table size 138389, node heap has 1 buffer(s)
Hash table size 138389, node heap has 76 buffer(s)
0.00 hash searches/s, 0.00 non-hash searches/s
---
           

change buffer

Innodb可對DML操作進行緩沖,包括:INSERT、DELETE、UPDATE,對應

insert buffer

delete buffer

purge buffer

适用對象是:非唯一的輔助索引;

參數

innodb_change_buffering

可設定緩沖類型:insert、delete、purges、changes、all等等;

對一條記錄的UPDATE過程:

  • 先将記錄标記已删除 (對應delete buffer,狀态的delete mark)
  • 真正删除記錄 (對應purge buffer,狀态的delete)

兩次寫

doublewrite用于提升Innodb的資料頁可靠性。

在應用重做日志前,使用者需要一個頁的副本,當寫入失效時,先通過頁的副本還原該頁,再進行重做,即doublewrite;

寫過程:在對緩沖池刷髒頁時,不是直接寫磁盤,而是将髒頁複制到記憶體中的doublewrite buffer,之後doublewrite buffer分2次,每次1MB順序寫入共享表空間的實體磁盤上,最後同步磁盤。

自适應哈希索引

Innodb會監控表上個索引頁的查詢,如果觀察到建立哈希索引可以提升性能,Innodb會自己建立哈希索引,即自适應哈希索引(Adaptive Hash Index,AHI);

使用要求:

  • 等值查詢
  • 以該模式通路100次
  • 頁通過該模式通路了N次,N=頁中記錄/16

異步IO

AIO,使用者發出一個IO請求後,可直接發下一個IO請求,不用等待響應。AIO還可将多個IO請求merge為1個IO,提高了IOPS性能;

重新整理鄰接頁

刷髒頁時,Innodb檢測該頁所在區(extent)的所有頁,如果是髒頁,一并重新整理。固态硬碟已經有很強的IO能力,可關閉該功能;

InnoDB關鍵特性Innodb關鍵特性

繼續閱讀