• mysql buffer pool详解


    介绍

    缓冲池是InnoDB在访问表和索引数据时缓存的主内存区域。缓冲池允许直接从内存访问频繁使用的数据,这加快了处理速度。在专用服务器上,通常会将多达80%的物理内存分配给缓冲池。

    为了提高大容量读操作的效率,缓冲池被划分为可能包含多行的页面。为了提高缓存管理的效率,缓冲池被实现为页面链表;很少使用的数据使用最近最少使用(LRU)算法的变体从缓存中老化。

    了解如何利用缓冲池将频繁访问的数据保存在内存中是MySQL调优的一个重要方面

    问题

    LRU算法是通用的淘汰算法,但是这个算法在这个场景有一个问题,因为预读的原因,很有可能从存储中读到内存数据中,在内存有限的情况,可能会导致常用的内存页会被淘汰掉。

    解决方案

    1.借用java 中堆内存的思路,把内存分成young和old两块,从磁盘中读到的数据先放到old区,只有实际访问到这页的数据才加载到young区的head 里,这样old区里老的没访问到的数据逐步会退到tail,最后淘汰掉。
    2.如果是全量查询的情况,会导致数据大量的全部查询出来,这时会造成buffer pool 污染,为了解决这个问题,在一的基础上增加了innodb_old_blocks_time 参数,只有数据页在old区,停留超过了这个范围的,才会加载到young区

    请添加图片描述

  • 相关阅读:
    Vue 正计时器组件
    TMS320F28374S之ADC一
    Jenkins 重新定义 pom 内容,打包
    linux下部署darknet
    npm run dev和npm run serve
    SSM毕设项目 - 基于SSM的房屋出租出售系统(含源码+论文)
    软件设计23种设计模式
    【PID控制技术】
    uniapp、微信小程序返回上页面刷新数据
    Map,List,Set 等集合以及底层数据结构
  • 原文地址:https://blog.csdn.net/qq_22222499/article/details/138170267