innodb change buffer 初识

来源:互联网 发布:韩信守荆州 知乎 编辑:程序博客网 时间:2024/06/05 15:11

What

change bufferingMySQL5.5加入的新特性,change bufferinginsert buffer的加强,insert buffer只针对insert有效,change bufferinginsertdeleteupdate(delete+insert)purge都有效。当修改一个索引块(secondary index)时的数据时,索引块在buffter pool中不存在,修改信息就会被cachechange buffer中,当通过索引扫描把需要的索引块读取到buffer pool时,会和change buffer中修改信息合并,再择机写回disk

 Why

目的还是为了减少随机IO带来性能损耗,说明白了:把随机IO尽量变成顺序IO。现在SSD盛行,在SSD上随机访问和顺序访问性能几乎差不多的情况下,change buffering特性不会带来多大的性能提升,但对于廉价的机械硬盘,这个参数还是能帮助提高性能的。

 

为什只针对二级非唯一索引有效?

    因为change buffer设计,并不判断唯一性。如果判断唯一性,还需要将磁盘上未放到buffer pool的页加载到内存,再进行判断唯一性。而change buffer设计的初衷,就是为了当二级索引页不在内存时,不进行加载,先将其插入到change bufferB+树中,最后merge到二级索引页中,减少多次随机IO的访问。