mysql innodb 之 buffer pool

1 buffer pool 是什么

buffer pool为内存中的一个数据块,主要由三部分组成:
1)缓存中的数据页–存储业务数据,大小和磁盘中的数据页大小一样,均为16K。
注:缓冲池和磁盘之间进行数据交换的单位是-数据页
2)数据描述区域,也称为控制块,记录缓存数据页的元数据信息:包括数据页所属表空间、数据页编号、数据页在buffer pool中的地址、锁信息、LSN信息等。控制块大小800K左右,为缓存页大小的5%左右。
3)三个链表:LRU链表、free链表、flush链表
其中,控制块和数据页一一对应

2.buffer pool 初始化

mysql server 启动后,按照比配置信息 innodb_buffer_pool_size 设置的值大一些的空间进行内存申请,
原因是多出的空间是为了存储控制块的信息。

3 修改缓冲池大小配置,配置参数 innodb_buffer_pool_size

更改此配置信息会修改缓冲池的大小,此操作是以块(chunk)的方式进行,一个chunk默认值为128M,
通过配置参数 innodb_buffer_pool_chunk_size 进行控制。因此,innodb_buffer_pool_size的设置应该为
innodb_buffer_pool_chunk_size的整数倍,且为了避免潜在的性能问题,innodb_buffer_pool_size/innodb_buffer_pool_chunk_size<1000(官方文档指出,原因未明)
innodb_buffer_pool_size = innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances*N(N>=1)

每次调整innodb_buffer_pool_size的大小,可以看成以innodb_buffer_pool_chunk_size为单位内存的增加或者释放。

4 缓冲池实例配置,配置参数 buffer pool instance

通过 innodb_buffer_pool_instances 来设置 buffer pool实例的个数
当可用内存足够大的时候,设置单个实例的buffer pool的内存区域尽管足够大,但是当多线程同时访问/操作同一个数据块时,
必然会加锁等待,导致性能降低。因此可以通过设置多个instance来缓解多线程处理时的性能问题。

5 链表介绍

5.1 free链表

当执行读写操作的时候硬盘中的数据页会加载到buffer pool的数据页中,当buffer pool中的数据页持久化到硬盘中时,
这些数据页又会被释放出来。
那么如何识别buffer pool中哪些数据页是空闲的,比较笨的方法是遍历所有的数据页,会造成性能问题。
而free链表则是用来记录buffer pool中所有的空闲数据页,free链表是一个双向链表,由每个数据页的控制块组成,每个控制块
有两个指针,free_pre:指向上一个空闲数据页,free_nexe:指向下一个空闲数据页

当某一空闲页加载数据后,则将该控制块对应的free节点从free链表中移除

5.2 LRU链表

innodb buffer pool对LRU算法进行了改进,将链表分为两块区域,一块是热区(高频访问的数据),
另一块是冷区(低频访问的数据)

5.3 flush链表

脏页:当执行写入操作时,首先会将数据写入到缓冲区,此时缓冲区的数据和磁盘中的数据不一致,不一致的数据页即为脏页。
产生了脏页,就要刷新磁盘–刷脏,那么如何确定那些缓冲区的数据页是脏页,将所有的数据页全部刷到磁盘中是一种解决方案,
但无疑是比较傻的,也比较消耗性能。
此时就用到flush链表,和free链表类似,是一个双向链表,在控制块中存在两个指针,分别指向上一个脏页和下一个脏页

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

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

相关文章

Redis的bitmap使用不当,我内存爆了

背景 最近发现Redis的内存持续暴涨&#xff0c; 涨的有点吓人&#xff0c;机器都快扛不住了&#xff0c;不得不进行Redis内存可视化分析&#xff0c;发现大量的String类型的大key 经分析&#xff0c;最近上线了页面UV的统计&#xff0c;那目前如何做的呢&#xff1f; 通过访…

Ubuntu重装kubernetes集群

重新初始化Kubernetes&#xff08;K8s&#xff09;通常是在集群出现问题或需要重新配置时的一种解决方法。以下是重新初始化K8s的一般步骤&#xff1a; 警告&#xff1a;重新初始化K8s将导致数据丢失&#xff0c;请确保在执行此操作之前进行充分备份。 1.备份数据 在重新初始…

Redux状态管理(运行机制及实例)

背景&#xff1a; JavaScript需要管理的状态越来越多&#xff0c;越来越复杂;这些状态包括服务器返回的数据、缓存数据、用户操作产生的数据等等&#xff0c;也包括一些UI的状态&#xff0c;比如某些元素是否被选中&#xff0c;是否显示加载动效&#xff0c;当前分页。 状态之…

Camille-学习笔记-测试流程和测试设计

## 测试用例学习路线 startmindmap * 测试用例 ** 黑盒测试方法论 *** 等价类 *** 边界值 *** 因果图 *** 判定表 *** 场景法 *** 基于模型的测试 ** 白盒测试方法论 ** 测试用例基础概念 ** 测试用例设计 ** 面试测试用例设计 ** 常用测试策略与测试手段 endmindmap **测试用…

浅谈信号完整性分析

什么是信号完整性?在过去的低速时代,电平跳变时信号上升时间较长,通常几个 ns。器件间的互连线不至于影响电路的功能,没必要关心信号完整性问题。但在今天的高速时代,随着 IC输出开关速度的提高,很多都在皮秒级,不管信号周期如何,几乎所有设计都遇到了信号完整性问题。…

【ACL 2023】Enhancing Document-level EAE with Contextual Clues and Role Relevance

【ACL 2023】Enhancing Document-level Event Argument Extraction with Contextual Clues and Role Relevance 论文&#xff1a;https://aclanthology.org/2023.findings-acl.817/ 代码&#xff1a;https://github.com/LWL-cpu/SCPRG-master Abstract 与句子级推理相比&…

ZigBee学习——在官方例程基础实现点灯

IAR版本 :10.10.1 Z-stack版本 :3.0.2 文章目录 一、买的板子原理图二、实现过程2.1 重定义LED的物理映射(HAL层)2.2 创建LED事件(应用层)2.2.1 定义用户事件2.2.2 修改zclGenericApp_event_loop() 2.3 触发事件 一、买的板子原理图 二、实现过程 2.1 重定义LED的物理映射(HAL…

服务攻防-端口协议桌面应用QQWPS等RCEhydra口令猜解未授权检测

知识点&#xff1a; 1、端口协议-弱口令&未授权&攻击方式等 2、桌面应用-社交类&文档类&工具类等 章节点&#xff1a; 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数据库&中间件&…

使用Logstash将MySQL中的数据同步至Elasticsearch

目录 1 使用docker安装ELK 1.1 安装Elasticsearch 1.2 安装Kibana 1.3 安装Logstash 2 数据同步 2.1 准备MySQL表和数据 2.2 运行Logstash 2.3 测试 3 Logstash报错(踩坑)记录 3.1 记录一 3.1.1 报错信息 3.1.2 报错原因 3.1.3 解决方案 3.2 记录二 3.2.1 报错信…

图像异或加密、解密的实现

很多论文提到了从左上角开始做异或,逐行推导得到结果。 解密过程是加密的逆过程。 先看其基本方法: 参考文献: A Chaotic System Based Image Encryption Scheme with Identical Encryption and Decryption Algorithm 大多数论文都用了这个思路,我们使用MATLAB实现代码…

Leetcode 热门百题斩(第一天)

介绍 针对leetcode的热门一百题&#xff0c;解决大多数实习生面试的基本算法题。通过我自己的思路和多种方法&#xff0c;供大家参考。 1.两数之和&#xff08;题号&#xff1a;1) 方法一 最先想到的就是两个for去遍历匹配。 class Solution {public int[] twoSum(int[]…

I2S、I2C、SPI和UART的区别

在嵌入式系统中&#xff0c;I2S&#xff08;Inter-IC Sound&#xff09;、I2C&#xff08;Inter-Integrated Circuit&#xff09;、SPI&#xff08;Serial Peripheral Interface&#xff09;和UART&#xff08;Universal Asynchronous Receiver-Transmitter&#xff09;是常见的…

重写Sylar基于协程的服务器(2、配置模块的设计)

重写Sylar基于协程的服务器&#xff08;2、配置模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…

vue3使用is动态切换组件报错Vue received a Component which was made a reactive object.

vue3使用is动态切换组件&#xff0c;activeComponent用ref定义报错 Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with markRaw or using shallowRef ins…

学习日志以及个人总结 (16)

共用体 共用体 union 共用体名 { 成员列表&#xff1b; }&#xff1b;//表示定义一个共用体类型 注意&#xff1a; 1.共用体 初始化 --- 只能给一个值&#xff0c;默认是给到第一个成员变量 2.共用体成员变量辅助 3.可以判断大小端 ----※&#xff01;&#xff01; 实际用途…

cesium 多边形渐变颜色

cesium画一个渐变颜色的多边形 方式一&#xff1a;用一张颜色渐变的图片作为材质&#xff0c;结合color属性&#xff0c;可设置多边形的颜色&#xff0c;达到渐变效果。图片指向正北方向。 viewer.entities.add({polygon: {hierarchy: Cesium.Cartesian3.fromDegreesArray([115…

bs4模块

bs4模块与案例 使用指南 bs4&#xff0c;全称BeautifulSoup 4&#xff0c;是Python中一个强大的网页解析库&#xff0c;它可以帮助我们方便地从网页中提取数据。bs4将复杂HTML文档转换成树形结构&#xff0c;每个节点都是Python对象&#xff0c;所有对象可以归纳为4种&#xf…

Springboot3.x+dubbo3.x+jdk17 开发的微服务框架

项目名字&#xff1a;Aspen 项目简介&#xff1a; 项目使用的jdk17、springboot3.1.2、dubbo3.2.10、nacos2.2.1、mybatis-flex1.7.7为基础搭建了一套简易的微服务框架 做这个项目的初衷就是心血来潮想试试dubbo3.X和springboot3.x和jdk17融合结果&#xff0c;简单来看效果还…

【PaddleSpeech】语音合成-男声

环境安装 系统&#xff1a;Ubuntu > 16.04 源码下载 使用apt安装 build-essential sudo apt install build-essential 克隆 PaddleSpeech 仓库 # github下载 git clone https://github.com/PaddlePaddle/PaddleSpeech.git # 也可以从gitee下载 git clone https://gite…

Python 异步任务队列实现

在实际开发中,我们经常需要进行异步任务的处理,以提高程序的效率和响应速度。本文介绍了使用 Python 中的 queue 模块和多线程实现一个简单的异步任务队列。通过该队列,我们可以异步执行任务,并在任务完成后进行回调处理。 代码实现 首先,我们定义了一些简单的示例函数,…