1分钟理解什么是MySQL的Buffer Pool和LRU 算法?

什么是缓冲池?

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

为了提高大容量读取操作的效率,缓冲池被划分为页。为了提高缓存管理的效率,缓冲池被实现为一个页面的链表;很少使用的数据会通过一种最近最少使用(LRU)算法的变体从缓存中淘汰。

LRU 算法

当需要为缓冲池添加新页面腾出空间时,会将最近最少使用的页面逐出,并将新页面插入到列表的中间位置。这种中间插入策略将列表视为两个子列表:

  • 在头部,有一个最近访问过的新的("年轻")页面的子列表
  • 在尾部,有一个访问时间较早的旧页面子列表 该算法将经常使用的页面保留在新子列表中。这 旧子列表包含使用频率较低的页面;这些页面是可能被淘汰的对象。

默认情况下:

  • 缓冲池的八分之三用于旧子列表。
  • 列表的中间点(tailHead)是新子列表尾部与旧子列表头部相接的分界线。
  • 上来把新加载进来的放在tailHead,也就是让你变成老的里面最新的,包括读和预加载的内容
  • 访问已经加载进buffer pool的页面会挪到新子列表第一位(用户实际查询,而非预加载)
  • 随着时间变长,未被访问的数据会像列表尾部移动,直至驱逐
相关推荐
多则惑少则明11 小时前
Vue开发系列——自定义组件开发
前端·javascript·vue.js
用户2506949216111 小时前
next框架打包.next文件夹部署
前端
程序猿小蒜11 小时前
基于springboot的校园社团信息管理系统开发与设计
java·前端·spring boot·后端·spring
一叶难遮天11 小时前
开启RN之旅——前端基础
前端·javascript·promise·js基础·es6/ts·npm/nrm
申阳11 小时前
Day 4:02. 基于Nuxt开发博客项目-整合 Inspira UI
前端·后端·程序员
程序猿_极客11 小时前
【期末网页设计作业】HTML+CSS+JavaScript 猫咪主题网站开发(附源码与效果演示)
前端·css·html·课程设计·网页设计作业
IT古董11 小时前
【前端】从零开始搭建现代前端框架:React 19、Vite、Tailwind CSS、ShadCN UI 完整实战教程-第1章:项目概述与技术栈介绍
前端·react.js·前端框架
有点笨的蛋11 小时前
从零搭建小程序首页:新手也能看懂的结构解析与实战指南
前端·微信小程序
爱宇阳11 小时前
Vue3 前端项目 Docker 容器化部署教程
前端·docker·容器
Irene199111 小时前
前端缓存技术和使用场景
前端·缓存