• 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%
    

  • 相关阅读:
    剑指Offer_编程题_从尾到头打印链表
    剑指Offer_编程题_替换空格
    剑指Offer_编程题_二维数组中的查找
    我用java爬虫爬了一个图片网站
    docker安装mysql5.7
    设计模式和设计原则
    nginx 限流配置
    JAVA性能监控与调优参考文档链接
    单例模式
    Java开发中对Redis的基本操作
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350073.html
Copyright © 2020-2023  润新知