MySQL-数据缓冲池(Buffer Pool)

  • InnoDB存储引擎以 为单位管理存储空间,增删改查的本质就是访问页面。为提高查询效率,DBMS会占用内存作为缓冲池,在执行SQL之前,会将磁盘上的页 缓存到内存中的 缓冲池(Buffer Pool)后执行相关SQL语句。

1、缓冲池(Buffer Pool)

  • 在InnoDB存储引擎中有部分数据会放到内存中,缓冲池占该内存的大部分空间,用来存储各种数据的缓存,如下所示:
    在这里插入图片描述
  • 缓冲池的重要性:消除CPU和磁盘之间的鸿沟,InnoDB存储引擎中会将完整页的数据全部加载到内存中将其缓存起来,省去磁盘IO
  • 缓冲原则:“位置 * 频次”原则,提高I/O访问效率进行优化,会优先对使用频次高的热数据进行加载
  • 预读特性:在读取数据的时候存在一个“局部性原理” 即 使用一些数据,大概率会使用它周围的数据,则会采用预读的机制提前加载,有效减少未来可能的磁盘I/O操作

2、查询缓存

  • 是指提前将 查询结果缓存 起来,后续不需要执行就能获取到结果。
  • 在MySQL的查询缓存并非缓存查询计划,而是查询对应的结果,只要数据表发生变化,查询缓存都会失效。
  • 与 缓冲池 的共同特点都是通过缓存的机制提高效率

3、缓冲池读取数据

  • 缓冲池管理器会尽量将经常使用的数据保存起来,在数据库进行读操作的时候,首先会判断该页面是否在缓存池中,如果存在直接读取,如果不存在就会通过内存或磁盘将页面放到缓冲池中再进行读取。
  • 缓存在数据库中的结构和作用如下所示:
    在这里插入图片描述
  • 当对数据库中的记录进行修改时,首先会修改缓冲池中页里面的记录信息,然后数据库会以一定频率刷新到磁盘上。缓冲池会采用一种叫 checkpoint 的机制 将数据写入磁盘

4、查看和设置缓冲池的大小

  • MyISAM存储引擎,只缓存索引,不缓存数据,对应的键缓存参数为:key_buffer_size
  • InnoDB存储引擎,通过查看innodb_buffer_pool_size变量来查看缓冲池的大小,命令如下:
mysql> show variables like '%innodb_buffer_pool_size';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (1.01 sec)

  • InnoDB存储引擎设置缓冲池大小,命令如下:
mysql> set global innodb_buffer_pool_size=268435456;
Query OK, 0 rows affected (0.45 sec)

mysql> show variables like '%innodb_buffer_pool_size';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 268435456 |
+------------------------

5、多个缓冲池(Buffer Pool)实例

  • 缓冲池的本质就是 InnoDB向操作系统申请一块 连续的内存空间,在多线程环境下,访问Buffer Pool中的数据都需要加锁处理。
  • Buffer Pool 特别大并且多线程并发访问特别高时,可以将Buffer Pool 拆分成若干个小的Buffer Pool ,每个Buffer Pool称为一个实例
  • 每个实例都是独立的去申请内存空间,独立的管理各种链表。
  • 查看缓冲池的个数,执行命令如下:
mysql> show variables like '%innodb_buffer_pool_instances%';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| innodb_buffer_pool_instances | 1     |
+------------------------------+-------+
1 row in set (0.00 sec)

  • 对Buffer Pool拆分,可以在配置文件中配置 具体启动选项,如:
[root@rqtanc ~]# vim /etc/my.cnf

[server]
innodb_buffer_pool_instances=2

  • Buffer Pool的实例大小相关计算依据为:innodb_buffer_pool_size/innodb_buffer_pool_instances

6、缓冲池更新数据流程

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git学习指南

文章目录 一.版本控制1.认识版本控制2.版本控制功能3.集中式版本控制4.分布式版本控制 二.Git的环境安装搭建1.Git的安装2.Git配置分类3.Git配置选项 三.Git初始化本地仓库1. git init/git clone-获取Git仓库2. 本地仓库文件的划分3. git status-检测文件的状态4. git add-文件…

数据库基础--MySQL多表查询之外键约束

MySQL多表关系 一对一 顾名思义即一个对应一个的关系,例如身份证号对于每个人来说都是唯一的,即个人信息表与身份证号信息表是一对一的关系。车辆信息表与车牌信息表也是属于一对一的关系。 一对多 即一个表当中的一个字段信息,对应另一张…

黑马面试篇1

目录 一、面试准备 二、Redis篇 ​编辑1. 布隆过滤器: 2. 缓存击穿概念&解决方案 3. 双写一致 4. 持久化 1)RDB的执行原理? 2)AOF vs RDB 5. 数据过期策略 6. 数据淘汰策略 7. 分布式锁 8. Redis集群 1&#xff…

如何选择一个出色的APP内测分发平台 - 探讨小猪APP分发平台

在众多APP内测分发平台中如何选择一个出色的APP内测分发平台 - 探讨小猪APP分发平台,小猪APP分发平台(zixun.ppzhu.net)以其出色的服务和高效的推广机制成为行业佼佼者。 小猪APP分发平台的核心优势 小猪APP分发平台不仅以其用户友好的界面赢…

Coze扣子开发指南:搭建一个免费的微信公众号AI客服

运营微信公众号的自媒体,现在借助Coze扣子可以非常好用而且免费的7*24客服了,完全不需要任何编程基础,操作非常简单: 打开Coze扣子,新建一个bot,输入bot名称、功能介绍和图标: 选择大语言模型&…

论文笔记(四十五)Attention Is All You Need

Attention Is All You Need 文章概括摘要1. 介绍2. 背景3. 模型架构3.1 编码器和解码器堆栈3.2 Attention3.2.1 按比例点积Attention3.2.2 Multi-Head Attention3.2.3 注意力在模型中的应用 3.3 定位前馈网络3.4 嵌入与 Softmax3.5 位置编码 4 为什么 Self-Attention5. Trainin…

OpenWRT部署Zerotier虚拟局域网实现内网穿透

前言 细心的小伙伴肯定已经发现了:电脑上部署了Zerotier,如果路由器也部署了OpenWRT,那是否能远程访问呢? 答案是肯定的。 OpenWRT部署Zerotier有啥好处? 那好处必须多,其中的一个便是在外远程控制家里…

Win11安装Postgresql(更新于24.5)

Postgresql是一个功能强大的开源对象关系数据库系统,拥有超过 35 年的积极开发经验,这为其在可靠性、功能稳健性和性能方面赢得了良好的声誉。 1.安装程序下载 根据系统版本型号选择对应安装程序完成下载 网址: https://www.enterprisedb…

自定驾驶A*算法的思路

1. 背景 2 算法理论 2. 1.A*算法公式 2.2. H是不确定的 2.4. H使用的启发函数 2.5. 曼哈顿距离

电机控制系列模块解析(14)—— 脉冲频率/幅值/密度调制

一、脉冲序列调制(PSM) 脉冲宽度调制(PWM)、脉冲幅值调制(PAM)和脉冲密度调制(PDM)都是脉冲序列调制技术,它们通过改变脉冲信号的某一特性(宽度、幅值或密度…

机器学习每周挑战——二手车车辆信息交易售价数据

这是数据集的截图 目录 背景描述 数据说明 车型对照: 燃料类型对照: 老规矩,第一步先导入用到的库 第二步,读入数据: 第三步,数据预处理 第四步:对数据的分析 第五步:模型建…

深入了解 Arthas:Java 应用程序诊断利器

序言 在 Java 应用程序的开发和运维过程中,诊断和解决性能问题是一项非常重要的任务。而 Arthas 作为一款由阿里巴巴开发的 Java 应用程序诊断工具,提供了一系列强大的功能,帮助开发人员实时监控、诊断和调优Java 应用程序。本文将深入介绍 …

压缩机的实际制冷量

制冷压缩机是制冷系统的“心脏”,吸收来自蒸发器的制冷剂蒸气,提高压力后排气到冷凝器,使制冷剂在系统中循环流动。 按温度范围可以分为高温,中温,低温制冷压缩机。按密封结构形式分类为开启式;半封闭式&a…

深度学习每周学习总结P7(咖啡豆识别)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 –来自百度网盘超级会员V5的分享 数据链接 提取码:7zt2 –来自百度网盘超级会员V5的分享 目录 0. 总结1. 数据导入及处理部分…

【Linux】学习笔记

文章目录 [toc]第一章:基础篇01|课程介绍02|内容综述03|什么是Linux04|Linux的内核版本及常见发行版内核版本发行版本Red Hat Enterprise LinuxFedoraCentOSDebianUbuntu 05|安装VirtualBox虚拟机VirtualBox下载url 06|在虚拟机中安装Linux系统Linux安装镜像下载 07…

020、Python+fastapi,第一个Python项目走向第20步:ubuntu 24.04 docker 安装mysql8、redis(一)

系列文章 pythonvue3fastapiai 学习_浪淘沙jkp的博客-CSDN博客https://blog.csdn.net/jiangkp/category_12623996.html 前言 docker安装起来比较方便,不影响系统整体,和前面虚拟环境有异曲同工之妙,今天把老笔记本T400拿出来装了个ubuntu24…

# 从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(1)

从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(1) 一、sentinel:概述 1、前言 – 服务熔断 Hystrix 的替换方案。 1)2018年底 Netflix 官方宣布 Hystrix 已经足够稳定,不再积极开发 Hys…

redis中的双写一致性问题

双写一致性问题 1.先删除缓存或者先修改数据库都可能出现脏数据。 2.删除两次缓存,可以在一定程度上降低脏数据的出现。 3.延时是因为数据库一般采用主从分离,读写分离。延迟一会是让主节点把数据同步到从节点。 1.读写锁保证数据的强一致性 因为一般放…

值得推荐的5个免费 PDF 转 Word 转换器分享

最好的免费 PDF 转 Word 转换器专注于两件事:范围和速度。 大多数 PDF 转换工具不限于一种文件类型 - 它们允许您将 PDF 转换为Microsoft Word,以及转换 Excel、Powerpoint 和其他 Office 应用程序(并再次转换回来)。最好的人很快…

C语言:指针详解(3)

目录 一、字符指针 二、数组指针 1.数组指针的定义 2.数组指针的初始化 3. 二维数组传参的本质 三、函数指针 1.函数指针的创建 2.函数指针的使用 3.有趣的代码(1) 4.有趣的代码(2) 四、typedef关键字 1.typedef的使用方法 2.typedef和#define的区别 五、函数指针…