14.3.5 Configuring InnoDB Change Buffering
14.3.5.1 Configuring the Change Buffer Maximum Size
当 INSERT, UPDATE, and DELETE操作在表上执行, 索引列的值(特别是secondary keys的值)
是经常在一个不排序的顺序,需要大量的I/O 带来给secondary indexes
InnoDB 有一个change buffer 用于caches 对secondary index I/O操作的缓存
通过不理解读取磁盘的页。缓存的改变是被合并当页被加载到buffer,
更新的页随后刷新到磁盘。InnoDB 主thread 合并缓存的changes 当server是空闲的时候,或者是一个缓慢的关机。
因为它可以导致更少的磁盘读取和写入,change buffer 功能是很宝贵的对于负载是I/O密集型的,
比如有大量的DML操作 比如批量插入。
然而,change buffer 占用buffer pool的一部分,降低了可用内存用于cache 数据页。
如果工作集总是适合Buffer pool, 或者你的表有相对较少的secondary indexes.
禁用change buffer 是有用的, 如果工作集占用整个在buffer ,changes buffer 不利用额外的负载,
因为它只使用与那些不在buffer pool的pages.
你可以控制extent ,InnoDB 执行change buffering 使用innodb_change_buffering 配置参数
mysql> show variables like ‘%innodb_change_buffering%’;
+————————-+——-+
| Variable_name | Value |
+————————-+——-+
| innodb_change_buffering | all |
+————————-+——-+
1 row in set (0.00 sec)
你可以启用和禁用buffering 用于 inserts, delete operations(当index records 初始标记用于删除)
和purge 操作(当index records 是物理删除的)
一个update 操作是一个insert 和delete 组合。默认是all
允许的innodb_change_buffering 值包括:
1.all
默认值:buffer inserts, delete-marking operations, and purges.