当前位置: 首页 > wzjs >正文

番禺网站开发哪家好网站解决方案

番禺网站开发哪家好,网站解决方案,找苏州网站建设,黄骅港开发区标准 LRU 算法的核心思想是:当缓存空间不足时,淘汰掉最近最少使用的数据块(Page)。它通常用一个链表来实现,链表头部是最近访问的 Page,链表尾部是最久未访问的 Page。 然而,在数据库系统中直接…

标准 LRU 算法的核心思想是:当缓存空间不足时,淘汰掉最近最少使用的数据块(Page)。它通常用一个链表来实现,链表头部是最近访问的 Page,链表尾部是最久未访问的 Page。

然而,在数据库系统中直接使用标准 LRU 算法可能会遇到一些问题:

  1. 全表扫描 (Full Table Scan) 问题: 当执行一个大的全表扫描时,会读取并访问表中所有的 Page。这些 Page 会被依次加载到 Buffer Pool 中,并根据标准 LRU 算法被移动到链表的头部。这会很快地将 Buffer Pool 中原来存放的、真正“热点”的、频繁访问的数据 Page 推到链表尾部,导致它们被淘汰,然后后续需要再次访问这些热点数据时又需要从磁盘重新读取,性能下降。

  2. 预读 (Read-Ahead) 问题: InnoDB 有预读机制,会一次性读取多个 Page 到 Buffer Pool 中。这些 Page 可能后续并不会被立即访问,如果直接放入 LRU 头部,同样会污染缓存。

为了解决这些问题,InnoDB 并没有采用一个纯粹的 LRU 列表,而是对其进行了优化,主要思想是将 LRU 列表分成两个部分:

InnoDB 的优化 LRU 策略:新生代 (Young Generation) 和老生代 (Old Generation)

InnoDB 的 Buffer Pool 内部维护了一个 LRU 链表,但这个链表被逻辑上分成了两个区域:

  1. Young Generation (新生代): 存放的是最近经常被访问的热点数据 Page。位于整个 LRU 链表的头部。

  2. Old Generation (老生代): 存放的是访问相对较少的 Page,或者刚从磁盘加载进来但还没有被频繁访问的 Page。位于整个 LRU 链表的尾部。

这两个区域的比例是可配置的,通过 innodb_old_blocks_pct 参数控制,默认值是 37%,表示老生代占整个 Buffer Pool 的 37%,其余 63% 是新生代。

Page 如何进入和在列表中移动:

  • 新 Page 加载: 当一个新的 Page 从磁盘被读取到 Buffer Pool 中时,它通常不会直接进入 Young Generation 的头部,而是被放置到 Old Generation 的头部。这是为了防止全表扫描等操作带来的 Page 瞬间冲垮 Young Generation。

  • 访问 Old Generation 中的 Page: 当访问一个已经在 Buffer Pool 中、且当前位于 Old Generation 的 Page 时:

    • 如果该 Page 在进入 Old Generation 后,距离首次访问它的时间还没有超过 innodb_old_blocks_time 设定的阈值(默认是 0 毫秒),那么它不会被移动到 Young Generation,仍然留在 Old Generation 的原位。这可以防止那些只被短暂扫描(如一次性顺序读)访问的 Page 立即晋升。

    • 如果该 Page 在进入 Old Generation 后,距离首次访问它的时间已经超过了 innodb_old_blocks_time 设定的阈值,那么该 Page 会被移动到 Young Generation 的头部。这意味着它被认为是热点数据,成功晋升。

  • 访问 Young Generation 中的 Page: 当访问一个已经在 Buffer Pool 中、且当前位于 Young Generation 的 Page 时,它会被移动到 Young Generation 的头部。这是标准 LRU 的行为,确保最近访问的热点数据始终在链表的最前端。

  • 淘汰 Page: 当 Buffer Pool 空间不足需要淘汰 Page 时,总是从 Old Generation 的尾部 开始淘汰最久未使用的 Page。

这种优化带来的好处:

  1. 保护热点数据: 大量的、一次性访问的 Page(如全表扫描带来的)只会被加载到 Old Generation 的头部,它们需要在 Old Generation 中“冷却”一段时间并再次被访问后才有机会晋升到 Young Generation。如果它们后续没有被频繁访问,就会在 Old Generation 中逐渐向尾部移动并最终被淘汰,而不会污染和挤占 Young Generation 中真正的热点数据。

  2. 应对顺序扫描: innodb_old_blocks_time 参数进一步优化了顺序扫描的影响。即使 Page 进入了 Old Generation,如果只是短暂访问,也不会立即晋升,减少了 Young Generation 被不常用的 Page 占据的可能性。

  3. 提高缓存命中率: 通过将热点数据集中在 Young Generation,并在淘汰时优先淘汰老生代的 Page,提高了 Buffer Pool 对常用数据的缓存效率,从而提高整体性能。

相关的配置参数:

  • innodb_buffer_pool_size: Buffer Pool 的总大小。

  • innodb_old_blocks_pct: Old Generation 占 Buffer Pool 的百分比 (默认 37)。

  • innodb_old_blocks_time: Page 在 Old Generation 中首次访问后,需要等待多久(毫秒)才能在下次访问时被晋升到 Young Generation (默认 0)。

总的来说,InnoDB 的 LRU 优化通过引入 Young/Old 两代以及 Page 进入和移动的策略,有效地解决了标准 LRU 在数据库工作负载下可能遇到的“缓存污染”问题,使得 Buffer Pool 能够更有效地缓存真正的热点数据。

http://www.dtcms.com/wzjs/572065.html

相关文章:

  • 怎样做已有网站的编辑维护上海企业信用网查询
  • 点击立即进入正能量网站对百度网站进行分析
  • 环球设计网站建立公司网站需要注意什么
  • 地图素材如何做ppt模板下载网站wordpress不能换行
  • 德兴网站seo公众号注册平台官网
  • 专门做门的网站网站开发涉及到缓存吗
  • nginx php7 wordpress北京网络推广优化公司
  • 网站里的内容都是什么作用网站设计模板免费下载
  • 无聊网站建设南城区做网站
  • 南京公司网站制作教育培训网页制作一套教程
  • 做网站前期构架图国际热点事件
  • 资阳网站网站建设东莞规划局官方网站
  • 网站的维护及建设wordpress媒体主题
  • 东营网站建设报价商标设计在线
  • 群晖ds218+做网站企业网站开发韵茵建站
  • 重庆网站搭建哪里可以做网站 png
  • 揭阳网站推广教程企业网站建设制作多少钱
  • 秦皇岛汽车网站制作it培训机构排名
  • 知名建设网站公司网站改版建议
  • 怎样在手机做自己的网站6网页设计师培训自我介绍
  • 电子商城网站开发多少钱工程建设是什么工作
  • 十堰城市建设网站全国企业信用信息平台
  • 重庆建设网站哪家好搜索引擎网站排行榜
  • 广州市手机网站建设怎么样网站设计网上培训学校
  • 做网站卖东西送上门sql数据库添加网站
  • 新丝路网站建设网站建设成本
  • 微网站的好处制作网站去哪家好
  • 网站制作 中企动力公司优化seo公司哪家好
  • 上海网站建设 s网站推广 网站
  • 郑州网站创建做app软件开发的公司