The change buffer is used to batch changes to non-unique secondary indexes to avoid random I/O. This is a feature that has to be enabled and you can use innodb_change_buffering to
- changes (inserts and delete-mark)
- all (default)
If the page is not in the buffer pool then the changes is buffered and it marks the buffer bitmap that the page has pending changes and then the changes are merged on read from disk. The change buffer is actually just a separate index not exposed with page number as the index. It is also smart enough to know that a change will cause a page to be empty or to split and it will not buffer those changes.
Need to grab these slides and go over it as to keep up and take notes was not working very well.