- 論壇徽章:
- 0
|
本文內(nèi)容遵從CC版權協(xié)議, 可以隨意轉載, 但必須以超鏈接形式標明文章原始出處和作者信息及版權聲明
網(wǎng)址: http://www.penglixun.com/tech/database/innodb_master_thread.html
InnoDB的主要IO操作都是在Master Thread(srv0srv.c)中完成的,所以分析InnoDB的IO調(diào)度,就一定要分析Master Thread線程。
下面是我畫的一張流程圖,標識了整個Master Thread的調(diào)度流程。紅色部分是InnoDB Plugin/XtraDB對原有InnoDB引擎的改進。
每個Process文字中最下面的括號是進行這個操作的具體函數(shù),可以參照源代碼閱讀本圖。
順便解釋一下“插入緩沖”(Insert Buffer):InnoDB為了避免更新數(shù)據(jù)時更新索引損失太多性能,使用了這種稱為Insert Buffer的方法來緩沖索引更新,對于非聚集索引(主鍵索引)、唯一索引的修改,不是每次都直接插入索引頁,而是先判斷要更新的這一頁在不在內(nèi)存中,如果不在則存入Insert Buffer,按照Master Thread的調(diào)度規(guī)則來合并非唯一索引和索引頁中的葉子結點,這樣經(jīng)常能減少更新索引的代價。為什么要求是非唯一索引(排除主鍵索引和唯一索引)呢?因為唯一索引要檢查記錄是不是存在,所以必須把修改的記錄影響的索引頁讀出來才知道是不是唯一,這樣Insert Buffer就沒意義了,反正要讀出來,所以只對非唯一索引有效。
show innodb status中的“INSERT BUFFER AND ADAPITIVE HASH INDEX”里面顯示了Insert Buffer的效果。
![]() |
|