在5.5之前。這還不叫change buffer,而是insert buffer;
當更新/插入的非聚集索引的數據所對應的頁不在內存中時(對非聚集索引的更新操作通常會帶來隨機IO),會將其放到一個insert buffer中,當隨後頁面被讀到內存中時,會將這些變化的記錄merge到頁中。當服務器比較空閒時,後臺線程也會做merge操作
但insert buffer會佔用buffer pool,並且在非聚集索引很少時,並不總是必要的,反而會降低buffer pool做data cache的能力,5.5提供了參數innodb_change_buffering來對其進行控制
根據官方文檔的描述,主要包括以下幾個值:
1.all
The default value: buffer inserts, delete-marking operations, and purges.
2.none
Do not buffer any operations.
3.inserts
Buffer insert operations.
4.deletes
Buffer delete-marking operations.(包括delete和update操作)
5.changes
Buffer both inserts and delete-marking.
6.purges
Buffer the physical deletion operations that happen in the background