14.6.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering

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)

原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6199021.html