mysql(五) buffer pool(缓存页数据与索引数据)

前面写了很多mysql的实用基础知识、接下来我将总结整理一些进阶和更深的一些知识、你知道的越多、不知道就越多、让我们一起学习。

目录

一、buffer pool的位置(Innodb存储引擎内)

二、Buffer Pool是什么?

1、降低磁盘访问的机制

2、Buffer Pool的大小

三、buffer pool的内部缓存了什么

四、Buffer Pool控制块

1、控制块是什么

2、控制块的大小

3、碎片是什么

4、缓存池的预读

五、Buffer Pool页分类和管理

1、页分类(Free Page(空闲页)、Clean Page(干净页)、Dirty Page(脏页))

Free Page(空闲页):

Clean Page(干净页):

Dirty Page(脏页):

2、Buffer Pool管理(LRU链表,free链表,flush链表)


前面4篇、我们从简单的sql语句优化到索引基础、再到索引使用和规则学习和复习一遍。

接下来我们要更深一步的思考、我们原来图上只写了一句查询索引、哪么就有下面这样的问题

1、索引是文件、每次查询都是去文件进行查询吗?(我们都知道IO操作非常消耗性能)

正常情况下查询数据,我们都是先从缓存查,查不到再从数据库查,同样的数据库也不想一直读磁盘,就需要优化、也加个缓存也就是buffer pool了、把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。

带着问题去学习和复习、保证有效性和记忆性。

先画图

一、buffer pool的位置(Innodb存储引擎内)

我们先看图再引入概念:缓冲池(buffer pool)是Innodb存储引擎内的

二、Buffer Pool是什么?

1、降低磁盘访问的机制

缓冲池(buffer pool)是Innodb存储引擎内一种降低磁盘访问的机制、通常以页(page)为单位缓存数据。缓存最热的数据页(data page)与索引页(index page),Page页默认大小16K,BP的底层采用链表数据结构管理Page。

2、Buffer Pool的大小

Buffer Pool 是在 MySQL 启动的时候,向操作系统申请的一片连续的内存空间,默认配置下 Buffer Pool 只有 128MB 。

可以通过调整 innodb_buffer_pool_size 参数来设置 Buffer Pool 的大小,一般建议设置成可用物理内存的 60%~80%。

三、buffer pool的内部缓存了什么

Buffer Pool 除了缓存「索引页」和「数据页」,还包括了 锁信息,插入缓存、自适应哈希索引、undo 页等等数据

在 MySQL 启动的时候,InnoDB 会为 Buffer Pool 申请一片连续的内存空间,然后按照默认的16KB的大小划分出页, Buffer Pool 中的页就叫做缓存页。这些缓存页开始都是空闲页,随着程序的运行,才会有磁盘上的页被缓存到 Buffer Pool 中。

四、Buffer Pool控制块

1、控制块是什么

Buffer Pool中缓存的是数据页,数据页大小跟磁盘默认数据页大小一样(16K),为了更好管理的缓存页产生了一个控制块(描述数据的区域)。

InnoDB 为每一个缓存的数据页都创建了一个单独的区域,记录的数据页的元数据信息,包括数据页所属表空间、数据页编号、缓存页在Buffer Pool中的地址,链表节点信息、一些锁信息以及 LSN 信息等,这个区域被称之为控制块

2、控制块的大小

控制块大概占缓存页大小的5%,16 * 1024 * 0.05 = 819个字节左右

3、碎片是什么

        数据页大小为16KB、而控制块的大小819个字节左右、分好所有的控制块数据页后,可能会有剩余的空间不够一对控制块和缓存页的大小、这个剩余的空间就叫碎片空间。

优化:把Buffer Pool 的大小计算后设置的刚刚好的话,也可能不会产生碎片。

4、缓存池的预读

问:比如我们需要查询一条记录,那么缓冲池就会缓存这一条记录吗?

不知道大家是否还记得局部性原理

局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。

答:整页数据、缓冲池提升IO效率,读取数据时候存在一个局限性原理,即使用一些数据,大概率还会使用它周围的一些数据,因此采用预读机制提前加载,减少未来可能的磁盘IO操作。将页加载到 Buffer Pool 后,再通过页里的页目录去定位到某条具体的记录。

五、Buffer Pool页分类和管理

1、页分类(Free Page(空闲页)、Clean Page(干净页)、Dirty Page(脏页))

Free Page(空闲页)

在Buffer pool刚初始化时分割空间、生成的一个一个页、此时里面的数据页以及控制块都是空的就是空闲页,位于 Free 链表。

Clean Page(干净页)

表示此页已被使用,但是页面未发生修改,位于LRU 链表。

Dirty Page(脏页):

是缓存的数据发生修改、变更数据和磁盘上的数据不一致所以是脏缓存页 脏缓存页的数据是要刷到磁盘上的。 当脏页上的数据写入磁盘后,内存数据和磁盘数据一致,那么该页就变成了干净页。脏页同时存在于 LRU 链表和 Flush 链表

2、Buffer Pool管理(LRU链表,free链表,flush链表)

上面说了三个页的类型、InnoDB也正是通过这三个链表的使用来控制数据页的更新与淘汰的。

我们在下一篇具体写三个链表是如何实现数据页的更新与淘汰。

版权声明:转载请附上文章地址DJyzh的博客_CSDN博客-java基础,框架,java高级领域博主

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

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

相关文章

揭秘阿里巴巴商品详情API:电商数据获取新篇章,业务效率飞跃提升

阿里巴巴平台商品详情API接口技术深度解析 一、概览 在阿里巴巴这个庞大的电商生态中,商品详情API接口(item_get)扮演着至关重要的角色。通过这一接口,开发者可以轻松地获取商品的详细信息,为选品、数据分析、价格监…

【机器学习算法】KNN鸢尾花种类预测案例和特征预处理。全md文档笔记(已分享,附代码)

本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用&#xff0…

Spark 离线开发框架设计与实现

一、背景 随着 Spark 以及其社区的不断发展,Spark 本身技术也在不断成熟,Spark 在技术架构和性能上的优势越来越明显,目前大多数公司在大数据处理中都倾向使用 Spark。Spark 支持多种语言的开发,如 Scala、Java、Sql、Python 等。…

读写锁学习笔记

1、数据结构 读锁是共享模式,写锁是独占模式,两个锁也公用一个AQS 两者共用一个state来表示,state前16位表示读锁,后16位表示写锁 读锁操作 通过向右位移16位,然后进行操作 写锁操作 通过和0000 0000 0000 0000 111…

VR全景在文旅景区方面的应用有哪些?

文旅是一个大消费行业,核心是面对C端客户,因此用户的体验非常重要。在这个基础上文旅景区是希望将风景传播给更多人,因此传播和裂变也是文旅行业所需的,而VR全景技术正好可以满足文旅景区所有的价值要素。 VR全景在文旅景区方面的…

2000-2022年上市银行相关指标数据

2000-2022年上市银行相关指标数据 1、时间:2000-2022年 2、来源:附在文件内,见表格名称 3、指标:证券代码、证券简称、上市日期、上市公司(银行)类型、不良贷款余额、不良贷款拨备覆盖率、不良贷款比率、净利差、净息差、净息差…

el-button 选择与非选择按钮批量处理

el-button 选择与非选择按钮批量处理 <el-button v-for"(voyage,i) in data[voyages][nowVoyage]":key"i"class"c-work-bts"type"primary":plain"nowWorkSpace!i"click"chooseWorkSpace(i)"size"small&qu…

判断一个dll/exe是32位还是64位

通过记事本判断&#xff08;可判断C或者C#&#xff09; 64位、将dll用记事本打开&#xff0c;可以看到一堆乱码&#xff0c;但是找到乱码行的第一个PE&#xff0c;如果后面是d?则为64位 32位、将dll用记事本打开&#xff0c;可以看到一堆乱码&#xff0c;但是找到乱码行的第…

龙讯旷腾PWmat用户福利,DFTB紧束缚法上线!

DFTB介绍 DFTB是基于密度泛函理论的紧束缚方法&#xff08;Density Functional based Tight binding method&#xff09;。其融合了DFT的准确性和紧束缚方法(TB)的高效性&#xff0c;是一种近似DFT的方法。通过使用预先计算的参数、最小基组、仅考虑最近邻相互作用&#xff0c…

Prometheus+influxdb1.8实现高可用监控系统

背景 Prometheus是业内有名的开源监控工具&#xff0c;我所在的公司也是采用PrometheusGrafana方式构建监控系统&#xff0c;并且不只是监控运维层面的数据&#xff0c;业务层面的服务状态也通过Java代码的客户端micrometer向Prometheus提交数据并在Grafana上配置出图&#xf…

day2:信号与槽

思维导图 使用手动连接&#xff0c;将登录框中的取消按钮使用t4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"123",密码是否为"…

【2024软件测试面试必会技能】allure测试报告(3): allure测试报告的用例描述设置

allure测试报告的用例描述相关方法&#xff1b;如下图 allure标记用例级别severity 在做自动化测试的过程中&#xff0c;测试用例越来越多的时候&#xff0c;如果执行一轮测试发现了几个测试不通过&#xff0c;我们也希望能快速统计出缺陷的等级。 pytest结合allure框架可以对…

二叉搜索树(二叉排序树、二叉查找树)

二叉搜索树&#xff08;二叉排序树、二叉查找树&#xff09; 一、定义二、操作&#xff08;一&#xff09;中序遍历&#xff08;二&#xff09;查找&#xff08;三&#xff09;插入&#xff08;四&#xff09;删除 三、二叉搜索树的应用四、二叉搜索树操作的性能分析五、总结 一…

解锁服务器外联:TinyProxy一键搭建指南

引言 在服务器需要访问外网的情况下&#xff0c;由于网络安全等原因&#xff0c;许多生产服务器限制了对外网的访问。本文介绍如何通过在一台能够访问外网的服务器上部署TinyProxy来实现代理&#xff0c;使得其他服务器可以通过该代理访问外网。 安装 TinyProxy是一个轻量级…

java异常处理设计

异常的继承体系 java 中的异常的超类是 java.lang.Throwable(后文省略为 Throwable), 他有俩自类Exception和Error&#xff0c;Error是由jvm管理&#xff0c;我们不需要考虑。 RuntimeException是Exception的子类。 检查异常&#xff08;Checked Exceptions&#xff09;&#…

【kubernetes】认识K8S基础理论

目录 一、k8s是什么&#xff1f; 二、为什么要用k8s&#xff1f; 三、k8s的主要功能 四、k8s的集群架构和组件 4.1k8s的集群架构介绍 4.2k8s的master的核心组件 ①kube-apiserver&#xff1a;作为所有服务请求的统一访问入口 ②kube-controller-manager&#xff1a;控制…

腾讯云域名解析

腾讯云域名解析 1.登录腾讯云控制台&#xff0c;点击“云产品”&#xff0c;选择“云解析”&#xff0c;进入云解析界面&#xff1b;2.在此界面可以选择购买或者添加新的域名&#xff0c;若已经购买了域名&#xff0c;则在域名列表处选择需要解析的域名&#xff0c;点击“解析…

用Python实现学生成绩数据分析

我的代码使用了pygal库来创建一个简单的折线图&#xff0c;并将其保存为SVG格式的文件。下面是对您代码的分析&#xff1a; 学生成绩数据分析表&#xff1a; 分析代码&#xff1a; 导入库&#xff1a;您导入了pygal库&#xff0c;这是一个用于生成可缩放矢量图形&#xff08;S…

Chrome插件精选 — 颜色拾取

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件挑选出比较好用的一款或几款&#xff0c;尽量满足界面精致、功能齐全、设置选项丰富的使用要求&#xff0c;便于节省一个个去尝试的时间和精力。 1. ColorZilla 下…

vue保留用户在列表的操作记录, beforeRouteLeave离开当前组件缓存数据即可

最近遇到一个需求,用户在列表页的查询输入框输入条件后,点击查询,然后此时切换菜单,再回到之前的页面,希望能停留在上一次输入的结果上,如下例子,用户管理页面,输入yangfan这个关键词搜索后,结果如下图: 当我此时点击权限管理后,再点击用户管理切回来,结果依旧如上…