zoukankan      html  css  js  c++  java
  • 14.6.3.3 Making the Buffer Pool Scan Resistant

    14.6.3.3 Making the Buffer Pool Scan Resistant  
    
    
    相比使用一个严格的LRU算法,InnoDB 使用一个技术来最小化数据总量 带入到buffer pool 而不被再次访问。
    
    目标是确保频繁访问的热的Pages停留在buffer pool里,
    
    即使预读和全表扫描带入到新的blocks 以后不会再被访问
    
    新读取的blocks 是插入到LRU列表的中间, 所有新读取的Pages是插入在默认是3/8的位置lru 列表的尾部。
    
    pages会被移动到列表的前面(最常使用的尾部) 当它们被访问在buffer pool 对于首次访问。
    
    这样, pages 不会再访问 不会让他到LRU列表的全面部分,
    
    很快淘汰在一个严格的LRU 方法。
    
    这种安排把LRU列表分成2个部分, 插入点的下面被认为是老的 会被驱逐
    
    
    对于一个InnoDB buffer pool 内存网络的活动,指定LRU 算法
    
    
    你可以控制插入点在LRU列表中,选择是否InnoDB 应用相同的优化对于带入到Buffer pool通过表或者索引扫描。
    
    
    配置参数innodb_old_blocks_pct 控制了old blocks的比例在LRU列表里。
    
    默认值是37, 相应的比例是3/8.
    
    
    优化 保持Buffer pool 避免被搅动通预读可以避免类似问题由于表或者索引扫描。
    
    在这些扫描中,一个数据页通常被访问很少的时间 不会再次被访问。
    
    
    配置参数innodb_old_blocks_time 指定了时间单位毫秒 在第一次访问后一个page 可以被访问不需要移动到前端(最常使用列表的尾端)
    
    
    增加这个值 让更多的blocks 看起来更快的age out
    
     innodb_old_blocks_pct and innodb_old_blocks_time 都是动态的
    
    因此那些参数的影响可以基于你的硬件配置,你的数据和你的负载的细节
    
    
    当扫描大的表不能整个放进Buffer pool,设置 innodb_old_blocks_pct 为一个小的值
    
    让数据只读一次的消耗很大一部分buffer pool.
    
    比如,你设置 innodb_old_blocks_pct=5 限制了这个数据只读一次到buffer pool的5%
    

  • 相关阅读:
    代理模式的理解和示例
    模板方法模式的理解和使用
    ubuntu16.04安装matlab_R2018a/R2017a
    c++ 智能指针用法详解
    ORBSLAM2单目初始化过程
    ROS launch 总结
    组合导航初理解
    对极几何-本质矩阵-基本矩阵
    学习OpenCV双目测距原理及常见问题解答
    Ubuntu 16.04 一系列软件安装命令,包括QQ、搜狗、Chrome、vlc、网易云音乐安装方法(转载)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350073.html
Copyright © 2011-2022 走看看