14.6.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering 当插入,更新,和删除操作在表上执行, 索引列的值(特别是 secondary keys的值) 经常是在无序的状态, 需要大量的I/O 来更新secondary indexes InnoDB 有一个change buffer 来caches changes 到secondary index的条目当相关的page 不是在buffer pool里。 这样避免了昂贵的I/O操作通过不是立即从磁盘读近到内存里。 buffered changes 是被合并当page 是加载到buffer pool,更新的pages 是随后刷新到磁盘。 InnoDB 主要线程合并Buffer changes 当server 是空闲的时候 因为它可以减少磁盘读和写, change buffer 功能是很有价值的对于 I/O密集型的负载 然而,change buffer 占用了一部分的buffer poll,降低了可用内存来cache data pages. 如果工作集几乎填满整个buffer pool,或者如果你的表有相对较少的secondary indexes, 则可以禁用change buffering. 如果 工作占用整个Buffer, change buffering不会产生额外的负载, change buffer 只是应用于pages 不在buffer pool里的 你可以控制extent InnoDB 执行change buffering 使用 innodb_change_buffering 配置参数。 你可以启用或者禁用buffering用于插入,删除操作(当index 记录是标记为删除) purge 操作(当index records 是物理删除) 一个更新操作是 insert和delete的组合 默认innodb_change_buffering value 是all mysql> show variables like '%innodb_change_buffering%'; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | innodb_change_buffering | all | +-------------------------+-------+ 1 row in set (0.00 sec)