change buffer是一個特殊的數(shù)據(jù)結構辩昆,當二級索引的頁面不在緩沖池中合住,change buffer會緩存對二級索引的數(shù)據(jù)操作(update周崭、insert甜无、delete)扛点。主要是減少磁盤的隨機I/O.(僅支持二級索引,不支持聚集索引岂丘、全文索引陵究、空間索引)
下面幾種情況會導致purge(清除)change buffer的操作
- 用戶線程選擇二級索引進行數(shù)據(jù)查詢,這時候必須要讀入二級索引頁奥帘,相應的ibuf entry需要merge到Page中铜邮。之后該page會被刷新到磁盤
- 當系統(tǒng)空閑或者slow shutdown時,后臺master線程發(fā)起merge
- change buffer 頁面沒有空間了寨蹋。
change buffer默認占有buffer pool內(nèi)存的25%松蒜,最大為50%。
對于唯一二級索引(unique key)已旧,由于索引記錄具有唯一性秸苗,因此無法緩存插入操作,但可以緩存刪除操作运褪;
如果索引包含降序索引列或主鍵包含降序索引列惊楼,則輔助索引不支持change buffer()
change buffer可以單獨配置對某些操作進行緩存,操作包含:all嗦枢、none攀芯、inserts、deletes文虏、changes侣诺、purges(后臺物理刪除的操作)
參考:https://dev.mysql.com/doc/refman/5.7/en/innodb-change-buffer.html