zoukankan      html  css  js  c++  java
  • mysql-5.7中的innodb_buffer_pool_prefetching(read-ahead)详解

    一、innodb的read-ahead是什么:

      所谓的read-ahead就是innodb根据你现在访问的数据,推测出你接下来可能要访问的数据,并把它们(可能要访问的数据)读入

      内存。

    二、read-ahead是怎么做到的:

      1、总的来说read-ahead利用的是程序的局部性原理;在innodb的数据文件中是用页面来管理的,而每64个页面组成一个Extend

      如果一个Extend的大多数据页面都被访问了,那么innodb就认为Extend中的其它页面被访问的概率也非常大,于是就可能所

      Extend中的其它页面与一并调入内存了。

      2、由于这样做可以把多次IO请求合并成一次,并且可能把多次IO的随机读变成线性读,这样就能更高效的利用磁盘的性能。

    三、read-ahead可能会带来的问题:

      记得之前听别人说过“饭是个好东西,但是吃多了也容易死人”,read-ahead是个好东西,关键在于度,比如说明明只用到

      了Extend中的一个页面,但是把整个Extend的64个页面调入内存,这样就会有问题了。

    四、怎么把握这个度:

      1、我们可以设定当一个Extend中的多少个页面被访问了的时候就把Extend的其它页面也调入内存,设定这个阈值的参数就是

      innodb_read_ahead_threshold

      2、如果把innodb_read_ahead_threshold设置成58,意思就是说当一个Extend中的58个页面都被访问了之后,就把余下的6

      个页面也调入内存。

      3、由上面的介绍可知,read-ahead可能带来性能提升,也可能带来性能问题;mysql还提供了一个一刀切的办法,那就是关闭

      read-ahead这个功能;可以把innodb_read_ahead_threshold设置成0

    ----

    交流学习

    -----

  • 相关阅读:
    黑盒测试方法用例设计详解
    跨域
    HTTP Referer
    Java抽象类和接口
    深入理解Java垃圾回收机制
    Java异常处理机制
    hash
    JUint4的下载、配置及对一个算法编写单元测试用例(测试多组数据每组多个参数)
    get和post的区别
    Mac 文档阅读软件Dash软件破解版
  • 原文地址:https://www.cnblogs.com/JiangLe/p/7396699.html
Copyright © 2011-2022 走看看