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能力,可關閉該功能;
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SO1cDZ0ETMwMDZjVTY2UmZ3MGN5IjM1gjZkBzY0MTNj9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)