在上一篇文章中,提到了change buff对于更新的优化,有些小伙伴可能会和WAL机制混淆,redo log 不也是先更新缓存再写日志的吗?这两个不是一回事吗?我个人的理解是,change buff对innodb_buffer_pool是一个补充。首先看图

到硬盘前的一些步骤省略,这里着重强调缓冲池发生的事情。

图中不同颜色方块代表不同的页面缓存。天蓝色:没有使用过的页。红色:脏页。黄色:干净页。

省略号表示其他的数据记录。

现在我们从innodb_buffer_pool入手,先说查询。

innodb_buffer_pool查询

mysql刚启动的时候innodb_buffer_pool是空的,执行查询后被查询的数据会缓存到innodb_buffer_pool当中。很显然在第一次查询的时候是没有办法读缓存的,由图中我们不难看出,innodb_buffer_pool中的页缓存是直接存储了数据行,所以在查询时如果能够命中缓存的话,是不需要读硬盘的,那么在没有其他干扰的情况下,两次相同的查询第二次查询的效率应该是高于第一次查询的,并且在缓存够用的情况下,数据量越大差距越明显,现在我们还是用之前的表t来做这个实验,建表语句如下:

CREATE TABLE `t` (`id` int(11) DEFAULT NULL,`a` int(11) DEFAULT NULL,`b` int(11) DEFAULT NULL,`d` int(11) DEFAULT NULL,KEY `a` (`a`),KEY `b` (`b`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

存储过程如下:

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()
begindeclare i int;set i=1;while(i<=100000)doinsert into t (`id`,`a`,`b`,`d`) values(i,i,i,i);set i=i+1;end while;
end
CREATE DEFINER=`root`@`localhost` PROCEDURE `ttt`()
begindeclare i int;set i=1;while(i<=10000)doupdate t set a=a+1 where b=i;set i=i+1;end while;
end

表建好后往表中插入10万条数据


现在我们重启mysql(为了清除缓存,免受影响)

现在我们执行一个大查询看看时间是否与理论一致。语句如下:

 select * from t where d>10000 and d<20000;

不难看出,同样的查询受缓存影响时间差距几乎是10倍。

innodb_buffer_pool修改

从上面的图可以看出,如果缓存中有数据的话修改会直接改缓存,到了合适的时机才会写硬盘。

如果缓存中没有要修改的数据,就会先读硬盘将数据读到缓存中,再修改缓存。

接下来做修改操作,同样的,我们先重启清空缓存再尝试。使用上面的存储过程进行修改。首先是直接修改

再查询

先查询后修改

修改完再查询

可以看出由于查询之后缓存中已经有需要修改的数据了,第二次修改的速度明显快很多。并且修改完之后的查询也非常快,明显后面的查询也用上了缓存。

在查询的时候,change buffer是没有办法和innodb_buffer_pool查询一样缓存有数据直接返回的,因为change buffer记录的是修改操作这个动作,并不是修改后的数据,所以即便change buffer中已经有了,在查询时也必须先将硬盘的数据读到缓存区,然后将change buffer中的动作应用到缓存上,才能返回。但是由于change buffer 只记录动作,所以在修改时缓存中没有要修改的数据页也不要紧,直接在change buffer中记下这个动作就可以了,在查询的时候才需要读硬盘。

change buffer的优化在5.x的版本中仅支持插入。这里我没有找到好的测试用例,就不献丑了,如果有大佬知道的话,敬请不吝赐教。

change buff 与buffer_pool有什么区别?相关推荐

  1. sql语句中change和modify修改语法的区别

    sql语句中modify和change都有修改.改变的意思,那么在使用中,它们的区别主要在哪里呢? 1.不同点: 均可用于alter语句中,修改字段属性: 2.相同点: 主要有2点区别 (1)modi ...

  2. mysql之ALTER COLUMN、CHANGE COLUMN、MODIFY COLUMN的区别

    ALTER COLUMN:设置或删除列的默认值(操作速度非常快) 例子: alter table film alter column rental_duration set default 5; al ...

  3. input事件和change事件的区别

    今天在监听<input>输入框的内容变化时监听的是change事件,本意是希望输入框内容一发生变化就执行事件监听方法,但是在运行时却发现我在输入框中输入了内容,但是监听事件并没有执行,改用 ...

  4. mysql 普通索引和唯一索引_MySQL 普通索引和唯一索引的区别

    该文为< MySQL 实战 45 讲>的学习笔记,感谢查看,如有错误,欢迎指正 一.查询和更新上的区别 这两类索引在查询能力上是没差别的,主要考虑的是对更新性能的影响.建议尽量选择普通索引 ...

  5. InnoDB原理篇:Change Buffer是如何提升索引性能的?

    前言 相信很多小伙伴设计索引时,考虑更多的是索引是否能覆盖大部分的业务场景,却忽略了索引的性能. 什么?不同的索引,性能还不一样? 是的,这要从change buffer说起.   Change Bu ...

  6. 阅读笔记 - MySQL Change Buffer

    文章目录 前言 MySQL - Change Buffer 什么是Change Buffer Change Buffer原理 为什么针对非唯一索引页 Change Buffer好处 适合使用场景 相关 ...

  7. mysql 前端proxy_【4.分布式存储】-mysql及proxy

    概述 文章https://segmentfault.com/a/11... 中介绍了存储应该考虑的方向.本文详细介绍其中的mysq,主要是INNODB.整体架构,启动流程,一条语句的执行过程带你快速深 ...

  8. 敖丙思维导图-Mysql数据库

    敖丙思维导图系列目录 这些知识整理都是自己查阅帅丙资料加以总结滴~ 每周都会更新知识进去. 如有不全或错误还请大家在评论中指出~ 敖丙思维导图-集合 敖丙思维导图-多线程之synchronized\T ...

  9. 比较v-bind和v-model

    简单来说,区别如下: 1.v-bind用来绑定数据和属性以及表达式,缩写为':' 2.v-model使用在表单中,实现双向数据绑定的,在表单元素外使用不起作用 一.v-model v-model多在表 ...

最新文章

  1. 前端学习(1346):用户的增删改查操作3增加
  2. 云计算机有哪些特征,你知道云计算有哪些核心特征吗?
  3. matlab如何进行数字信号处理,数字信号处理基础及MATLAB实现(第2版)
  4. 学习Spring Boot:(九)统一异常处理
  5. DIV CSS在不同IE版本和FF以及Chrome中的兼容性差异解决方法(推荐)
  6. android对象关系映射框架ormlite之一对多(OneToMany)
  7. C++向函数传递数组
  8. 计算机工程制图课程安排,2017工程制图课程简介
  9. cocos2dx lua转luac的问题(32位与64位不兼容问题)
  10. (三万字长文)类型即正义:TypeScript 从入门到实践系列,正式完结!
  11. 燃起图与燃尽图,故事地图和产品线路图分析
  12. 小米8样张彩色噪点问题分析
  13. VS或VC编译正常,但运行时出现Stack overflow
  14. python:小鱼的航程
  15. 慢慢读《Deep Learning In Natural Language Processing》(一)
  16. word简单三线表制作(分列、分行)
  17. 36Kr常锋无人机-项目分析和投资决策要点
  18. matlab干涉全息图,基于MATLAB的计算全息干涉图仿真
  19. windows虚拟主机控制面板哪个比较好用?
  20. 关于任务调度执行不成功的调试

热门文章

  1. undefined 与 undeclared 的区别
  2. npm ERR! Invalid tag name “@vue-cli“: Tags may not have any characters that encodeURIComponent encod
  3. 人流密度(crowd counting)估计方法
  4. 《围棋十决》——围棋战术对商业竞争的启发
  5. JXL导出EXCEL合并单元格、文字对齐方式
  6. 小米的面试过程及面试题
  7. Win7上安装IIS7并运行.net4.0程序
  8. c# 委托 与事件——委托(加深理解)
  9. ArangoDB 中集成的 RocksDB 存储引擎常见问题解答[已翻译]
  10. uniapp开发h5下载pdf