Buffer Pool

news2025/4/3 9:56:49

Buffer Pool
Innodb 存储引擎设计了一个缓冲池来提升读写的性能
在 MySQL 启动的时候,InnoDB 会为 Buffer Pool 申请一片连续的内存空间,然后按照默认的16KB的大小划分出一个个的页, Buffer Pool 中的页就叫做缓存页。此时这些缓存页都是空闲的,之后随着程序的运行,才会有磁盘上的页被缓存到 Buffer Pool 中。
当我们查询一条记录时,InnoDB 是会把这条记录的整个数据页的数据加载到 Buffer Pool 中,因为,通过索引只能定位到磁盘中的页,而不能定位到页中的一条记录。将页加载到 Buffer Pool 后,再通过页里的页目录二分查找去定位到某条具体的记录。
Free 链表
管理空闲缓存页的
● 每次从磁盘中加载一个页到 Buffer Pool 中,就从 free 链表中取一个空闲缓存页,并且把该缓存页对应控制块上的信息填好,然后把该缓存页的控制块从 free 链表上移除
Flush 链表
管理脏页的
● 设计 Buffer Pool 除了能提高读性能,还能提高写性能,也就是更新数据的时候,不需要每次都要写入磁盘,而是修改 Buffer Pool 中对应的缓存页,将缓存页标记为脏页,然后再由后台线程将脏页写入到磁盘。下次有查询语句命中了这条记录,直接读取缓存页中的记录就行了,这个记录就是最新的。
改良版的 Lru 链表
为什么要使用改良版的 lru 链表呢?因为普通的 lru 链表,存在两个问题
● 预读失效
● Buffer Pool 污染,也就是 Buffer Pool 中的热数据被淘汰了
预读失效
因为程序是具有空间局限性的,靠近当前被访问的数据,未来也大概率会被访问。
所以,MySQL 在加载数据页时,会提前把它相邻的数据页一并加载进来,目的是为了减少磁盘 IO
但是可能这些被提前加载进来的数据页,并没有被访问,相当于这个预读是白做了,这个就是预读失效。
如果使用简单的 LRU 链表,就会把预读页放到 LRU 链表头部,而当 Buffer Pool空间不够的时候,还需要把末尾的页淘汰掉。
如果这些预读页如果一直不会被访问到,就会出现一个很奇怪的问题,不会被访问的预读页却占用了 LRU 链表前排的位置,而末尾淘汰的页,可能是频繁访问的页,这样就大大降低了缓存命中率。
所以MySQL改进了普通的 lru 链表,讲链表划分为两个区域,一个是yong区域,一个是old区域。
在这里插入图片描述

划分这两个区域后,预读的页就只需要加入到 old 区域的头部,当页被真正访问的时候,才将页插入 young 区域的头部。如果预读的页一直没有被访问,就会从 old 区域移除,这样就不会影响 young 区域中的热点数据。
Buffer Pool 污染
如果使用简单的 LRU 链表,进行全表扫描的时候,就可能将 Buffer Pool 中的大部分页给替换出去,导致大量热点数据被淘汰了,等下次访问这些热点数据的时候,由于缓存未命中,就会导致大量的磁盘IO,导致MySQL性能会急剧下降。
像前面这种全表扫描的查询,很多缓冲页其实只会被访问一次,但是它却只因为被访问了一次而进入到 young 区域,从而导致热点数据被替换了。
LRU 链表中 young 区域就是热点数据,只要我们提高进入到 young 区域的门槛,就能有效地保证 young 区域里的热点数据不会被替换掉。
MySQL 是这样做的,进入到 young 区域条件增加了一个停留在 old 区域的时间判断。
在对某个处在 old 区域的缓存页进行第一次访问时,就在它对应的控制块中记录下来这个访问时间:
● 如果后续的访问时间与第一次访问的时间在某个时间间隔内,那么该缓存页就不会被从 old 区域移动到 young 区域的头部;
● 如果后续的访问时间与第一次访问的时间不在某个时间间隔内,那么该缓存页移动到 young 区域的头部;
这个间隔时间是由 innodb_old_blocks_time 控制的,默认是 1000 ms。
第二次访问的时间 - 第一次访问的时间 > 1 s
也就说,只有同时满足「被访问」与「在 old 区域停留时间超过 1 秒」两个条件,才会被插入到 young 区域头部,这样就解决了 Buffer Pool 污染的问题 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java 社区人口管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 社区人口管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…

Linux安装Zookeeper、Hadoop、Hive、Hbase全家桶系列

目录 Linux安装配置Zookeeper Linux安装配置Hadoop Linux安装Hbase Linux安装配置Zookeeper 新建文件夹 mkdir /home/zookeeper 下载到指定文件夹 官网 Apache ZooKeeper wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.1/apache-zookeeper-3.8.1-bin.tar.gz…

Jmeter的JSON断言

JSON断言是测试工作中经常用到的一种断言方法,一般用于断言某个字段值是否等于我们指定的值。所以JSON断言只能针对响应结果为applicaton/json格式的进行断言操作。 如果是其他类型(如:Test、html),则无法使用这种方式…

【神经网络】tenorflow实验11--人工神经网络(2)

1. 实验目的 ①掌握梯度下降法的优化算法; ②能够使用tf.keras构建Sequential模型,完成多分类任务。 2. 实验内容 ①下载MNIST数据集,建立神经网络模型,实现对MNIST手写数字数据集的识别,调整超参数和训练参数&…

公网对讲SDK——对讲应用场景

anyRTC 公网对讲 SDK的发布,解决了开发者想做公网对讲应用但没有技术的困境;SDK全平台支持的特性,让开发者可以在任何平台接入对讲能力;同时因为包体积小、对业务零入侵等特性被运用到各行各业中,下面咱们就来聊一聊公…

ansible——利用主机模式选择主机

一:主机模式:对目标主机的一种选择方式 1.以student用户身份并使用student作为密码登录workstations ssh studentworkstation 2.创建projects-host项目文件,并下载ansible配置文件 lab projects-host start 3.在 workstation上更改到/home…

恭喜星球又一名小伙伴上岸大厂

大家好,我是冰河~~ 星球里有不少小伙伴经过自己的努力,认真学习和总结,最终拿到了自己心仪的大厂Offer!本来想给大家分享下的,但是,过去挺长一段时间冰河都处于“全天候工作状态”,经常加班到晚…

业务连续性管理的重要性体现在哪里?

业务连续性管理的重要性体现在哪里?随着全球化、信息化和市场竞争加剧,企业面临的风险越来越多样化、复杂化。突发事件如自然灾害、供应链中断、网络攻击等都有可能对企业生产经营带来巨大影响,甚至导致公司破产倒闭。因此,保证业…

day14 - 提取图像信息

本期主要介绍图像的礼帽运算和黑帽运算,礼帽运算常用于获取原始图像的噪声信息,或者得到比原始图像的边缘更亮的边缘信息;黑帽运算常用来检测图像中的波谷结构,分离比邻近点暗一些的斑块,比如得到轮廓效果图。 完成本…

数据结构——实现单向链表

文章目录 :cow:前言:banana:单链表与顺序表的对比:orange:单链表的初始操作及结构体:watermelon:申请一个节点:carrot:打印:strawberry:销毁:apple:尾插:pear:尾删:grapes:头插:peach:头删:pineapple:数据的查找:lemon:数据的修改:tomato:在pos位置之后插入节点:potato:在pos位…

编辑距离算法

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入:word1 "horse", word2 "ros&quo…

ChatGPT真的可以帮助你申请留学吗?未必!

在留学申请的整个流程中,如果说哪一项是最不可或缺的项目,那“文书写作”一定首当其冲。国外院校对学生的评估参考项目,除了文书以外,也在不断地探寻更多的评估方式来全面地了解申请的学生。 从加州大学的申请流程中可以了解到这方…

Spring 之 jwt,过滤器,拦截器,aop,监听器

Spring 之 jwt,过滤器,拦截器,aop,监听器 一、jwt编写1.1 pom1.2 JwtUtils1.3 注意1.4 用法 二、过滤器2.1 原理2.2 使用场景2.3 使用步骤2.3.1 自定义过滤器类implements Filter2.3.2 配置类2.3.3 过滤器使用场景 2.4 问题 三、拦…

中美信托金融大厦(总体)建筑能耗管理系统的设计与应用

摘要:大型公共建筑总面积不足城镇建筑总面积的4%,但总能耗却占全国城镇总耗电量的22%,大型公共建筑单位面积年耗电量达到70~300KWh,为普通居民住宅的10~20倍。公共建筑是节能大户和节能主要对象&#xff0c…

这些论文的作者居然是猫、狗、仓鼠……

01 猩猩 Journal of Applied Animal Welfare Science 期刊在2007年发表了论文 Welfare of Apes in Captive Environments: Comments On, and By, a Specific Group of Apes (圈养环境中的猿类福利:对特定类群的评论”),作者Sue S…

Web服务组合优化 基于改进哈里斯鹰算法的Web服务组合优化【Matlab代码22#】

文章目录 【可更换其他算法,获取资源请见文章第7节:资源获取】1. Web服务2. QoS感知的Web服务组合3. 改进后的CHHO算法3.1 原始HHO算法3.2 CHHO算法 4. 优化目标5. 部分代码展示6. 仿真结果展示7. 资源获取 【可更换其他算法,获取资源请见文章…

详解token已过期含义及解决方 token过期是否需要重新登录

详解token已过期含义及解决方 token过期是否需要重新登录Web应用和用户的身份验证息息相关,从单一服务器架构到分布式服务架构再到微服务架构,用户安全认证和授权的机制也一直在演进,下文对各个架构下的认证机制做个总结。单一服务器架构该架…

day19 - 使用高通滤波提取图像边缘

在OpenCV中,对于图像或者视频的处理都或多或少的会涉及傅里叶变换的概念。在数学上,傅里叶变换是指所有的波形都可以由一系列简单且频率不同的正弦曲线叠加得到。也就是说,人们所看到的波形都是由其他波形叠加得到的。这个概念对操作图像非常…

Linus Torvalds发布了第一个Linux内核6.4候选版本

导读自Linux内核6.3发布和下一个内核系列Linux 6.4的合并窗口开放以来,已经过去了一段时间,近日,Linus Torvalds发布了第一个RC(候选发布版)的里程碑,供公众测试。 为期两周的Linux内核6.4合并窗口现已关闭…

3D开发程序员,如何在程序中将GLB格式转OBJ

Aspose.3D 是一个功能丰富的游戏软件和计算机辅助设计(CAD)的API,可以在不依赖任何3D建模和渲染软件的情况下操作文档。API支持Discreet3DS, WavefrontOBJ, FBX (ASCII, Binary), STL (ASCII, Binary), Universal3D, Collada, glTF, GLB, PLY…