插入緩衝
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的可靠性,用來解決...