innodb 關鍵特性

2021-09-22 23:28:12 字數 2134 閱讀 8310

插入緩衝

innodb儲存引擎對於非聚集索引的插入或更新操作,不是每一次直接插入到索引頁中,而是先判斷插入的非聚集索引頁是否在緩衝池,若在,則直接插入;不在,則先放在乙個insert buffer物件中。資料庫這個非聚集的索引已經插到葉子節點,而實際並沒有,知識存放在另乙個位置。然後再以一定的頻率和情況進行insert buffer和輔助索引頁子節點的merge操作,這樣就把多次插入操作合併為乙個。

insert buffer使用條件:

使用命令show engine innodb status檢視插入緩衝資訊

mysql>show engine innodb status\g;

......

-------------------------------------

insert buffer and adaptive hash index

-------------------------------------

ibuf: size 1, free list len 33, seg size 35, 2118 merges

merged operations:

insert 2296, delete mark 0, delete 0

discarded operations:

insert 0, delete mark 0, delete 0

......

seg size顯示當前insert buffer的大小為35*16kb;

free list len表示空閒列表的長度;

size代表已經合併記錄頁的數量

merges合併次數

merged operations和discarded operations顯示change buffer中每個操作的次數

merged operations合併操作

merged operations insert插入的記錄數

merged operations delete mark刪除的記錄數

merged operations delete清除記錄數

discarded operations表示發生merge操作時,表已刪除。

discarded operations insert表示取消的合併運算元

。。。change buffer

innodb從1.0.x開始引入change buffer。innodb可以對dml操作都進行緩衝。

通過引數innodb_change_buffering開啟各種buffer選項。可選值:inserts、deletes、purges、changes、all、none。changes表示啟用inserts和deletes,all表示啟用全部,none表示都不啟用。預設all。

mysql> show variables like 'innodb_change_buffering';

+-------------------------+-------+

| variable_name | value |

+-------------------------+-------+

| innodb_change_buffering | all |

+-------------------------+-------+

通過引數innodb_change_buffer_max_size控制change buffer最大記憶體使用數量。預設25,表示最多使用1/4的緩衝池記憶體空間。該引數最大有效值50.

mysql> show variables like 'innodb_change_buffer_max_size';

+-------------------------------+-------+

| variable_name | value |

+-------------------------------+-------+

| innodb_change_buffer_max_size | 25 |

+-------------------------------+-------+

InnoDB關鍵特性

innodb使用insert buffer 欺騙 資料庫 對於為非唯一索引,輔助索引的修改操作並非實時更新索引的葉子頁,而是把若干對同一頁面的更新快取起來做合併為一次性更新操作,轉化隨機io 為順序io,這樣可以避免隨機io帶來效能損耗,提高資料庫的寫效能。ibuf pool size per ma...

InnoDB的關鍵特性

1 插入緩衝 insert buffer 對於非聚集索引頁的插入或更新操作,不是每一次直接插入到索引頁中,而是先判斷插入的非聚集索引頁是否在緩衝池中,若在則直接插入 若不在則先放入到乙個insert buffer物件中。看似資料庫這個非聚集的索引已經插入到葉子節點,實際並沒有,只是存放在另乙個位置。...

InnoDB關鍵特性之double write

一 髒頁刷盤風險 關於io的最小單位 1 資料庫io的最小單位是16k mysql預設,oracle是8k 2 檔案系統io的最小單位是4k 也有1k的 3 磁碟io的最小單位是512k 因此,存在io寫入導致page損壞的風險 二 doublewrite 兩次寫 提高innodb的可靠性,用來解決...