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

    ----

    交流学习

    -----

  • 相关阅读:
    跨域资源共享 CORS 详解
    Vue.js 与 Laravel 分离
    Laravel 5.4+Vue.js 初体验:Laravel下配置运行Vue.js
    移动端web及app设计尺寸
    另辟蹊径:vue单页面,多路由,前进刷新,后退不刷新
    vue2.0 keep-alive最佳实践
    教你用Cordova打包Vue项目
    oracle_数据处理
    oracle_集合函数
    oaracel 函数_行转列
  • 原文地址:https://www.cnblogs.com/JiangLe/p/7396699.html
Copyright © 2011-2022 走看看