14.3.5 Configuring InnoDB Change Buffering

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.

原文地址:https://www.cnblogs.com/hzcya1995/p/13351182.html