InnoDB關鍵特性之插入緩衝

2021-10-07 14:47:52 字數 638 閱讀 7288

聚集索引就是資料索引按照索引排序,且內容也是順序儲存(等價於漢語字典按照拼音索引排序)

非聚集索引索引項按照順序排列,但是索引對應的內容並不相鄰,是隨機儲存的(等價於漢語字典按照筆畫部首排序)

innodb中行記錄是按照聚集索引維度來順序儲存的

乙個表只有乙個聚集索引,一般為表中的主鍵索引,若無主鍵索引,則是第乙個不為空的唯一索引

對於非聚集索引的插入和更新操作,首先判斷非聚集所有頁是否在緩衝池中,如果在,則直接插入;

不在的話就放到乙個插入緩衝物件中,返回插入成功的結果。

然後再由master thread 以一定的頻率將insert buffer與非聚集索引葉子節點進行merge操作,將多個

插入合併到乙個中,提高了非聚集索引的插入的效能。

滿足倆條件

1 索引是輔助索引

2 索引不是唯一的(因為在插入緩衝時,並不是去查詢索引頁來判斷插入記錄的唯一性,去查詢就會

有離散讀取的現象,insert buffer就失去了意義)

1 在應用程式插入資料時宕機,大量的insert buffer並沒有合併到實際的非聚集索引中,此時資料庫恢復的話需要大量的時間

2 insert buffer在寫密集的情況下會占用大量的緩衝區記憶體,預設最大是一半的緩衝區記憶體,可能影響其他操作

InnoDB關鍵特性之double write

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

InnoDB關鍵特性之Insert buffer

我們知道在進行插入操作時,資料頁的存放還是按主鍵id的執行順序存放,但是對於非聚集索引,葉子節點的插入不再是順序的了。例如,對於如下表結構進行insert操作 create table tab id int auto increment,name varchar 30 primary key id ...

InnoDB關鍵特性

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