MySQL—buffer pool
一、buffer pool的介绍
Buffer pool是什么
一个内存区域,为了提⾼数据库的性能,数据库操作数据的时候,把硬盘上的数据加载到buffer pool,不直接和硬盘打交道,操作的是 buffer pool的数据,数据库的增删改查都是在 buffer pool 上进行
Buffer pool 有多大
Buffer Pool 是在 MySQL 启动的时候,向操作系统申请的一片连续的内存空间,默认配置下 Buffer Pool 只有 128MB 。
Buffer Pool 缓存什么?
二、Buffer pool如何管理
其中「有三大双向链表」:
▪「free 链表」
• ⽤于帮助我们找到空闲的缓存⻚
▪ 「flush 链表」
• ⽤于找到脏缓存⻚,也就是需要刷盘的缓存⻚
▪ 「lru 链表」
• ⽤来淘汰不常被访问的缓存⻚,分为热数据区和冷数据区,冷数据区主要存放那些不常被用到的数据
简单的 LRU 算法并没有被 MySQL 使用,因为简单的 LRU 算法无法避免下面这两个问题:
- 预读失效;
- Buffer Pool 污染;
预读失效是什么?
MySQL 在加载数据页时,会提前把它相邻的数据页一并加载进来,目的是为了减少磁盘 IO。
但是可能这些被提前加载进来的数据页,并没有被访问,相当于这个预读是白做了,这个就是预读失效。
预读失效解决方案
改进了 LRU 算法,将 LRU 划分了 2 个区域:old 区域 和 young 区域(63:37)。划分这两个区域后,预读的页就只需要加入到 old 区域的头部,当页被真正访问的时候,才将页插入 young 区域的头部。如果预读的页一直没有被访问,就会从 old 区域移除,这样就不会影响 young 区域中的热点数据。
什么是 Buffer Pool 污染?
当某一个 SQL 语句扫描了大量的数据时,在 Buffer Pool 空间比较有限的情况下,可能会将 Buffer Pool 里的所有页都替换出去,导致大量热数据被淘汰了,等这些热数据又被再次访问的时候,由于缓存未命中,就会产生大量的磁盘 IO,MySQL 性能就会急剧下降,这个过程被称为 Buffer Pool 污染
缓存污染解决方案
只有同时满足「被访问」与「在 old 区域停留时间超过 1 秒」(innodb_old_blocks_time 阈值(默认为1秒))两个条件,才会被插入到 young 区域头部,这样就解决了 Buffer Pool 污染的问题 。
相关文章:

MySQL—buffer pool
一、buffer pool的介绍 Buffer pool是什么 一个内存区域,为了提⾼数据库的性能,数据库操作数据的时候,把硬盘上的数据加载到buffer pool,不直接和硬盘打交道,操作的是 buffer pool的数据,数据库的增删改查…...
《C和指针》笔记8: 枚举类型
枚举 (enumerated)类型就是指它的值为符号常量而不是字面值的类型,它们以下面这种形式声明: enum Jar_Type { CUP, PINT, QUART, HALF_GALLON, GALLON };这条语句声明了一个类型,称为Jar_Type。这种类型的变量按下列方式声明: e…...

Python爬虫框架之Selenium库入门:用Python实现网页自动化测试详解
概要 是否还在为网页测试而烦恼?是否还在为重复的点击、等待而劳累?试试强大的Selenium!让你的网页自动化测试变得轻松有趣! 一、Selenium库到底是什么? Selenium 是一个强大的自动化测试工具,它可以让你直…...
docker swarm 部署服务网络问题
docker swarm 服务部署问题 docker swarm 部署服务时可能会出现,启动服务特别慢的情况,甚至一个service 启动后,容器会长时间处于 preparing 状态,直到 状态切换成 running 状态后,才会启动下一个service。然后查询资…...
1.00001git源码clone后进行编译(带调试)
– 新建用户 useradd postgres passwd postgres – 用户加入sude组 先cd到/etc/sudoers目录下 由于sudoers文件为只读权限,所以需要添加写入权限,chmod uw sudoers vim sudoers 找到root ALL (ALL) ALL这一行,在下一行加入username ALL (A…...

使用StorageClass动态创建pv
rook-ceph安装部署到位后,就可以开始来尝试使用StorageClass来动态创建pv了。 有状态的中间件在kubernetes上落地基本上都会用到StorageClass来动态创建pv(对于云上应用没有那么多烦恼,云硬盘很好用,但是对于自己学习和练习来说还…...

数据结构(Java实现)-ArrayList与顺序表
什么是List List是一个接口,继承自Collection。 List的使用 List是个接口,并不能直接用来实例化。 如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和LinkedList都实现了List接口。 线性表 线性表(lin…...

性能优化维度
CPU 首先检查 cpu,cpu 使用率要提升而不是降低。其次CPU 空闲并不一定是没事做,也有可能是锁或者外部资源瓶颈。常用top、vmstat命令查看信息。 vmstat 命令: top: 命令 IO iostat 命令: Memory free 命令: 温馨提示:…...

【C++】map的奇葩用法:和函数结合
2023年8月26日,周六下午 今天才发现map居然还能这样用... #include <iostream> #include <map> #include <functional>void printOne() {std::cout << "已经打印出1" << std::endl; }void printTwo() {std::cout <<…...
关于JVM的参数类型
JVM参数类型,主要是可以分为三类。分别是: 标准参数 例如: -help-server-client-version-showversion-cp-classpath 等等,这类参数的特点是在jdk各版本里基本不会变的,相对稳定。 X参数 X参数也就是非标准化参数&am…...
HTTP协议中的Content-Type及其常见类型
什么是Content-Type? Content-Type是HTTP协议中的一个头部字段,用于指示请求或响应中所传输的实体的媒体类型。 为什么使用Content-Type? 使用Content-Type可以告知接收方如何解析和处理传输的数据,确保数据能够正确地被解析和…...

android Junit4编写自测用例
10多年的android开发经验,一直以来呢,也没有使用过android自带的测试代码编写。说来也惭愧。今天也花了点时间稍微研究了下。还挺简单。接下来就简单的说一下。 新建工程 直接默认新建一个工程,就会有两个目录androidTest和test(unitTest)两…...

arcgis:画一幅自己城市的shp地图
首先打开ArcGis10.6,点击带黄底的小加号,添加底图。 可以选择中国地图彩色版,然后双击,转动鼠标滑轮找到属于自己的城市。 点击-目录,在新建的文件夹里右击-新建-shapefile。 格式选择折线,先把主要河流道路…...
采购油封时要考虑的因素
对于依赖机械和设备的行业来说,油封的选择是一个关键的决定,以确保平稳运行并防止流体泄漏。由于有多种选择,了解购买油封时要考虑的关键因素对于确保适合特定应用至关重要。让我们深入研究一下在此选择过程中发挥关键作用的考虑因素。 1、运…...
【无标题】科目一笔记
载人超过核定人数 校车/公路客运汽车/旅游客运汽车 未达到20%,-6超过20%以上,-12 七座以上载客汽车 1. 超过20%以上未达到50%,-6 2. 超过50%以上未达到100%,-9 其他载客汽车 1. 超过20%以上未达到50%,-3 2. 超过50…...

java八股文面试[数据结构]——HashMap和HashTable区别
HashMap源码中的重要常量 DEFAULT_INITIAL_CAPACITY: HashMap的默认容量,16 MAXIMUM_CAPACITY: HashMap的最大支持容量,2^30 TREEIFY_THRESHOLD:Bucket中链表长度大于该默认值,转化为红黑树。 UNTREEIFY_THRESHOLD…...
乐趣无限:10款基于Pygame的经典游戏合集
引言 游戏开发一直是许多程序员和游戏爱好者追求的梦想。而Pygame作为一款功能强大的游戏开发库,为我们提供了实现各种有趣游戏的工具和接口。在本文中,我将向大家介绍10款基于Pygame的经典游戏合集,从简单的猜数字到刺激的飞机…...
php检测数组是否存在某个键,和是否存在某个变量
一、array_key_exists() array_key_exists() 是一个 PHP 内置的函数,用于判断数组中是否存在指定的键。该函数接收两个参数,第一个是键名,第二个是数组。 $arr array(name > Jack, age > 20, country > China);if (array_key_exi…...
c++中的const与constexpt的区别
c中的const与constexpr的区别 const const 是一种修饰符,用于声明一个只读的常量。它可以用于变量、函数参数和函数返回类型。声明为 const 的变量的值在初始化后就不能再改变。 适用场景: const 适用于声明运行时常量,在编译时无法确定值…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...