1.什么是插入缓冲 (Insert Buffer
insert buffer是一种特殊的数据结构(B+ tree)并不是缓存的一部分,而是物理页,这里讲的缓冲是针对的非聚集索引并且索引不是唯一的。 对于非聚集索引的插入或者更新操作,不是每一次直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓冲池中,若在,则直接插入;若不在,则先放入Insert Buffer对象中,最后再以一定的频率进行Insert Bufffer和辅助索引页子节点中的merge(合并)操作。
2. insert buffer的缺点
①.可能导致数据库宕机后实例恢复时间变长。如果应用程序执行大量的插入和更新操作,且涉及非唯一的聚集索引,一旦出现宕机,这时就有大量内存中的插入缓冲区数据没有合并至索引页中,导致实例恢复时间会很长
② 在写密集的情况下,插入缓冲会占用更多的缓冲池内存(innodb_buffer_pool), 默认情况可以最大占用1/2
3.查看insert buffer
命令 show engine innodb status
seg size显示了当前Insert buffer的大小为2 * 16kb
free list len代表了空闲列表的长度,(缓冲区内可用的页数)
size代表了已经合并记录页的数量。
Inserts 代表了插入的记录数量; merged recs代表了合并的插入记录数量;
merged operations - insert
: The number of inserted records merged.merged插入的记录数
merged operations - delete mark
: The number of deleted records merged.merged删除记录数
merged operations - delete
: The number of purge records merged.merged清除记录数
discarded operations - insert
: The number of insert merge operations discarded. 丢弃的插入合并操作数
discarded operations - delete mark
: The number of delete merge operations discarded. 丢弃的删除合并操作数
discarded operations - delete
: The number of purge merge operations discarded. 丢弃的清除合并操作数。