读书频道 > 网站 > 网页设计 > MySQL管理之道:性能调优、高可用与监控
1.1.16 添加删除缓冲和清除缓冲
14-02-20    奋斗的小年轻
收藏    我要投稿   
本书由资深MySQL专家撰写,以最新的MySQL版本为基础,以构建高性能MySQL服务器为核心,从故障诊断、表设计、SQL优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、MySQL高可用集群搭建与管理、MySQL服立即去当当网订购

在向一个表进行insert、delete或update操作时,里面的索引(聚集索引和非聚集索引)也会随即更新,其中,主键(聚集索引)是按照顺序进行插入的,而非聚集索引则会分散地插入。顺序读写的速度要比随机读写的速度快,表越大就越明显,而插入的性能就会降低。

因此在MySQL5.1.X版本里,InnoDB引入了一种优化措施,当一个表做insert操作来更新非聚集索引时,如果该非聚集索引页被读入Innodb_Buffer_Pool缓冲池里,那么就直接更新非聚集索引,并使用正常的写脏数据块方法将其闪存到磁盘中;如果没有读入缓冲池里,则使用插入缓冲区来缓存非聚集索引页的变化,直到该页被读入Innodb_Buffer_Pool缓冲池里,执行插入缓存合并操作,并使用正常的写脏数据块方法将其闪存到磁盘中,从而提高了插入性能。

然而,由于插入缓冲区占用部分Innodb_Buffer_Pool缓冲池,因此使得缓存数据页的可用内存减少了。如果数据和索引全部读入Innodb_Buffer_Pool缓冲池,并且表中有相对较少的非聚集索引,那么就可以关闭 InnoDB的插入缓冲功能。前面也介绍了,如果该非聚集索引页被读入Innodb_Buffer_Pool缓冲池里,那么就会直接更新非聚集索引,并使用正常的写脏数据块方法将其闪存到磁盘中,这样一来,插入缓冲区就没有什么作用了,并且还占用一定的内存,这种情况下关闭该功能较好。

从MySQL5.5.X版本开始,还为删除操作扩展了同样的功能(首先是删除标记操作,然后使用收集/清除所有已删除记录的清除操作)。现在可以使用innodb_change_buffering 配置参数来控制删除缓冲和既有插入缓冲功能,默认是all,此参数支持动态设置:
SET GLOBAL innodb_change_buffering = all;

关于innodb_change_buffering参数的介绍,请参见MySQL5.5手册:


 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站