innodb 的四個特性
insert buffer
innodb使用insert buffer"欺騙"資料庫:對於為非唯一索引,輔助索引的修改操作並非實時更新索引的葉子頁,而是把若干對同一頁面的更新快取起來做合併為一次性更新操作,轉化隨機io 為順序io,這樣可以避免隨機io帶來效能損耗,提高資料庫的寫效能。
1.1 原理:
a 先判斷要更新的這一頁在不在記憶體中。
b 如果不在,則讀取index page 存入insert buffer,按照master thread的排程規則來合併非唯一索引和索引頁中的葉子結點.
double write
double write 是innodb在 tablespace上的128個頁(2個區)是2mb;
其原理:
為了解決 partial page write 問題 ,當mysql將髒資料flush到data file的時候, 先使用memcopy 將髒資料複製到記憶體中的double write buffer ,之後通過double write buffer再分2次,每次寫入1mb到共享表空間,然後馬上呼叫fsync函式,同步到磁碟上,避免緩衝帶來的問題,在這個過程中,doublewrite是順序寫,開銷並不大,在完成doublewrite寫入後,在將double write buffer寫入各表空間檔案,這時是離散寫入。
如果發生了極端情況(斷電),innodb再次啟動後,發現了乙個page資料已經損壞,那麼此時就可以從doublewrite buffer中進行資料恢復了。
位於共享表空間上的double write buffer實際上也是乙個檔案,寫dwb會導致系統有更多的fsync操作, 而硬碟的fsync效能, 所以它會降低mysql的整體效能. 但是並不會降低到原來的50%. 這主要是因為:
1) double write 是乙個連線的儲存空間, 所以硬碟在寫資料的時候是順序寫, 而不是隨機寫, 這樣效能更高.
2) 將資料從double write buffer寫到真正的segment中的時候, 系統會自動合併連線空間重新整理的方式, 每次可以重新整理多個pages;
自適應雜湊
mysql的heap儲存引擎預設的索引型別為雜湊
而innodb儲存引擎提出了另一種實現方法,自適應雜湊索引(adaptive hash index)。
innodb儲存引擎會監控對錶上索引的查詢,如果觀察到建立雜湊索引可以帶來速度的提公升,則建立雜湊索引,所以稱之為自適應(adaptive)的。
自適應雜湊索引通過緩衝池的b+樹構造而來,因此建立的速度很快。而且不需要將整個表都建雜湊索引,innodb儲存引擎會自動根據訪問的頻率
限制1.只能用於等值比較,例如=, <=>,in
2.無法用於排序
3.有衝突可能
4.mysql自動管理,人為無法干預。
read-ahead預期
innodb read-ahead
innodb 提供了兩種預讀的方式,一種是 linear read ahead,由引數innodb_read_ahead_threshold控制,當你連續讀取乙個 extent 的 threshold 個 page 的時候,會觸發下乙個 extent 64個page的預讀。另外一種是random read-ahead,由引數innodb_random_read_ahead控制,當你連續讀取設定的數量的page後,會觸發讀取這個extent的剩餘page。
innodb 的預讀功能是使用後台執行緒非同步完成的。innodb啟動了innodb_read_io_threads個後台執行緒,
InnoDB的關鍵特性
1 插入緩衝 insert buffer 對於非聚集索引頁的插入或更新操作,不是每一次直接插入到索引頁中,而是先判斷插入的非聚集索引頁是否在緩衝池中,若在則直接插入 若不在則先放入到乙個insert buffer物件中。看似資料庫這個非聚集的索引已經插入到葉子節點,實際並沒有,只是存放在另乙個位置。...
Innodb儲存的特性
一 特性 1.它遵循acid模式設計,具有與事務 transactions 回滾和保護使用者資料的崩潰恢復能力。2.innodb 提供行級鎖,擁有不加鎖讀取特性。innodb鎖定在行級,這些特色增加了多使用者併發性和效能表現。沒有在innodb中擴大鎖定的需要,因為在innodb中行級鎖定適合非常小...
InnoDB關鍵特性
innodb使用insert buffer 欺騙 資料庫 對於為非唯一索引,輔助索引的修改操作並非實時更新索引的葉子頁,而是把若干對同一頁面的更新快取起來做合併為一次性更新操作,轉化隨機io 為順序io,這樣可以避免隨機io帶來效能損耗,提高資料庫的寫效能。ibuf pool size per ma...