【MySQL】变更缓冲区:作用、主要配置以及如何查看

news2025/5/16 21:02:50

📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述

文章目录

  • 🏳️‍🌈一、变更缓冲区的作用?
    • 1.1 为什么是二级索引?
    • 1.2 Merge的触发时机有哪些?
  • 🏳️‍🌈二、变更缓冲区的主要配置项都有哪些?
    • 2.1 缓冲类型
    • 2.2 更改缓冲区的最大大小
  • 🏳️‍🌈三、怎么查看当前变更缓冲区的信息?
  • 👥总结


前些天发现了一个巨牛的 人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到 网站。


在这里插入图片描述

🏳️‍🌈一、变更缓冲区的作用?

变更缓冲区用来缓存对 二级索引数据 的修改,当数据页没有被回载到内存中时,先把修改缓存起来,等到其他查询操作发生时,数据页被加载到内存后,再直接修改内存中的数据页,从而达到减少磁盘I/0的目的。

变更缓冲区占用 Buffer Pool 的一部分空间,具体如图所示
在这里插入图片描述
场景:如果要修改一条数据,内存与磁盘之间的交互过程是怎么样的

  1. 在磁盘中找到对应的数据行
  2. 数据行所在的数据页加载到内存中
  3. 在内存中完成对数据行的修改
  4. 把修改过后的数据页在写回到磁盘中

即,需要两次磁盘IO才能完成一次数据修改操作

变更缓冲区用来缓存对 二级索引数据 的修改,是一个特殊的数据结构

当使用 INSERTUPDATEDELETE 语句修改二级索引对应的数据时,如果对应的数据页在缓冲池中则直接更新,如果不在缓冲池中,那么就把修改操作缓存到变更缓冲区,这样就不用立即从磁盘读取对应的数据页了,当之后的读操作将对应的数据页从磁盘加载到缓冲池中时,变更缓冲区中缓存的修改操作再批量合并到缓冲池,从而达到减少磁盘I/0的目的。执行流程如图所示:

在这里插入图片描述

1.1 为什么是二级索引?

  • 关于索引在数据库初阶已经做了介绍,我们知道索引分为 聚集索引(主键)二级索引(自定义)
  • 由于聚集索引具有唯一性,我们分析一下聚集索引为什么不能被放入变更缓存,假设表中有一个主键(ID),现在有两条 INSER 语句,都在插入数据时ID的值相同(id=1),那么在变更缓冲区中就存在两个修改操作,如果以后要合并到缓冲池中,这时就会出现重复的主键值,所以聚集索引的修改不能被加入到变更缓冲区;
  • 与聚集索引不同,二级索引通常是不唯一的,并且向二级索引中插入数据时由于数据列不同,所以位置相对随机,同样对于删除和更新操作可能会影响不相邻的二级索引页,如果每次都从磁盘读取数据就会发生大量的随机I/0,以变更缓冲区的方式先将修改缓存起来,当真正的读取数据时再把修改合并到缓冲池中可以提升效率。

1.2 Merge的触发时机有哪些?

  • 读取对应的数据页时;
  • 当系统空闲或者 Slow Shutdown 时,主线程发起 merge;
  • Change buffer 的内存空间即将耗尽时;
  • Redo Log 写满时。

🏳️‍🌈二、变更缓冲区的主要配置项都有哪些?

主要的配置项有 缓冲类型更改缓冲区的最大大小

2.1 缓冲类型

在修改二级索引数据时变更缓冲区可以减少磁盘I/0从而提高效率,但是变更缓冲区占用了缓冲池的一部分空间,从而减少了可用于缓存数据页的内存,如果业务场景读多写少,或者表中的二级索引相对较少,那么可以考虑禁用更改缓冲从而提高缓冲池空间。

可以通过选项文件或 SET GLOBAL 语句对系统变量 innodb_change_buffering 进行设置,来控制变更缓冲区对于插入、删除操作(索引记录被标记为删除) 和 清除操作(当索引记录被物理删除时)的开启或禁用:

删除操作: 索引记录被标记为删除
清除操作: 索引记录被物理删除时
更新操作: 是插入和删除操作的组合

all: 默认值,缓存插入、删除标记操作和清除
none:不缓存任何操作
inserts: 只缓存插入操作
deletes: 只缓存删除标记操作
changes: 缓存插入和删除标记操作
purges: 缓存发生在后台的物理删除操作

2.2 更改缓冲区的最大大小

  • 通过 innodb_change_buffer_max_size 系统变量可以设置更改缓冲区的最大大小,默认为25,最大为50,表示更改缓冲区占缓冲池内存总大小的百分比

  • 在有大量插入、更新和删除的业务场景中,可以考虑增加 innodb_change_buffer_max_size 的值,在大部分是读多写少,比如用于报表的静态数据场景中考虑减小 innodb_change_buffer_max_size 的值

  • 需要注意的是,如果更改缓冲区占了缓冲池太多的内存空间,会导致缓冲池中的数据页更快地淘汰。

🏳️‍🌈三、怎么查看当前变更缓冲区的信息?

通过使用 SHOW ENGINE InnODB STATUS 访问 InnoDB 标准监视器输出中 INSERTBUFFER AND ADAPTIVE HASH INDEX 部分查看有关更改缓冲区状态的信息。

mysql> SHOW ENGINE INNODB STATUS\G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
... # 省略
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
insert 0, delete mark 0, delete 0
discarded operations:
insert 0, delete mark 0, delete 0
Hash table size 4425293, used cells 32, node heap has 1 buffer(s)
13577.57 hash searches/s, 202.47 non-hash searches/s
... # 省略

👥总结

本篇博文对 【MySQL】变更缓冲区:作用、主要配置以及如何查看 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

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

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

相关文章

C2S-Scale:Cell2Sentence v2

目前的单细胞基础模型(scFMs)在可扩展性、跨多种任务的灵活性以及整合文本信息的能力方面仍然有限。基于Cell2Sentence(C2S)框架展开工作,该框架将单细胞RNA测序(scRNA-seq)图谱表示为文本形式的…

技术伦理双轨认证如何重构AI工程师能力评估体系——基于AAIA框架的技术解析与行业实证研究

引言:AI工程师能力评估的范式转型 2025年全球人工智能产业呈现出两大特征:技术迭代加速与监管框架完善。据Gartner数据显示,全球75%的企业在AI项目部署中遭遇技术伦理混合型难题,传统单维度技术认证体系已无法满足产业需求。本文…

ubuntu20.04系统搭建k8s1.28集群-docker作为容器运行时

ubuntu系统搭建 ubuntu-22.04.5-desktop-amd64.iso映像文件--->实际却是20.4focal版本。 【安装过程没有特别指出的默认回车下一步】 【用户和密码设置】 【网络连接】 【在vmware上安装的话,网络配置如下】【在vm里配置选择nat或者桥接即可】 【国内源配置】&…

【Alist+RaiDrive挂载网盘到本地磁盘】

1.安装准备 安装RaiDrive RaiDrive - 像 USB 驱动器一样安装云存储 安装alist 安装方式请查看官网: AList文档 2.启动Alist(docker) docker官网 Install | Docker EngineDocker Desktop | Docker Docs 运行容器 docker run -d --restartalways -v /home/alist:/opt/alist/…

vue实现进度条带指针

效果最终 function calculatePointerPosition(value) {if (value < 2.6) return 12.5; // 非常差位置if (value < 5.1) return 37.5; // 较差位置if (value < 7.1) return 62.5; // 良好位置return 90; // 非常满意位置 }function getStatusText(value) {if (valu…

Kafka Go客户端--Sarama

Kafka Go客户端 在Go中里面有三个比较有名气的Go客户端。 Sarama:用户数量最多&#xff0c;早期这个项目是在Shopify下面&#xff0c;现在挪到了IBM下。segmentio/kafka-go:没啥大的缺点。confluent-kafka-go&#xff1a;需要启用cgo,跨平台问题比较多&#xff0c;交叉编译也…

RustDesk:开源电脑远程控制软件

RustDesk&#xff1a;开源电脑远程控制软件 RustDesk&#xff1a;开源电脑远程控制软件一、RustDesk 简介二、下载教程2.1 桌面版下载2.2 Android 版下载 三、安装教程3.1 桌面版安装 四、功能讲解4.1 远程控制4.2 文件传输4.3 安全可靠4.4 自定义服务器 五、RustDesk技术架构解…

[操作系统] 策略模式进行日志模块设计

文章目录 [toc]一、什么是设计模式&#xff1f;二、日志系统的基本构成三、策略模式在日志系统中的落地实现✦ 1. 策略基类 LogStrategy✦ 2. 具体策略类▸ 控制台输出&#xff1a;ConsoleLogStrategy▸ 文件输出&#xff1a;FileLogStrategy 四、日志等级枚举与转换函数五、日…

MoonBit正式入驻GitCode!AI时代的编程语言新星,开启高性能开发新纪元

在AI与编程语言深度交融的今天&#xff0c;开发者们正见证一场技术生产力的革命。由IDEA研究院基础软件中心倾力打造的MoonBit&#xff08;月兔&#xff09;编程语言&#xff0c;自2023年横空出世以来&#xff0c;凭借高性能、低延迟、轻量化的特性&#xff0c;迅速成为全球开发…

关于vue学习的经常性错误

目录 常见问题&#xff1a; 1关于引用本地下载es6模块文件&#xff0c;报404错误 2 使用createApp函数后没有调用mount函数挂载到浏览器 3 在mount函数中&#xff0c;忘记引用插值表达式所在标签的定位符如 标签选择器&#xff0c;类选择器等 4在直接使用Vue3函数时&#…

AtCoder Beginner Contest 403

再来一场atCoder&#xff0c;这一场简直血虐&#xff0c;让你回忆起了审题的重要性 A - Odd Position Sum 思路&#xff1a;题意很简单&#xff0c;求一个数组奇数位上数字和。很简单的问题&#xff0c;但你如果不仔细审题&#xff0c;就会浪费大量的时间 /* Author Owen_Q…

关于 Golang GC 机制的一些细节:什么是根对象?GC 机制的触发时机?

文章目录 关于 Golang GC 机制的一些细节&#xff1a;什么是根对象&#xff1f;GC 机制的触发时机&#xff1f;简要回顾 Golang GC 三色标记法的工作流程什么是根对象&#xff1f;GC 的触发时机&#xff1f; 关于 Golang GC 机制的一些细节&#xff1a;什么是根对象&#xff1f…

Python笔记:c++内嵌python,c++主窗口如何传递给脚本中的QDialog,使用的是pybind11

1. 问题描述 用的是python 3.8.20, qt版本使用的是5.15.2, PySide的版本是5.15.2, pybind11的版本为2.13.6 网上说在python脚本中直接用PySide2自带的QWinWidget&#xff0c;如from PySide2.QtWinExtras import QWinWidget&#xff0c;但我用的版本中说没有QWinWidget&#x…

C++效率掌握之STL库:map set底层剖析及迭代器万字详解

文章目录 1.map、set的基本结构2.map、set模拟实现2.1 初步定义2.2 仿函数实现2.3 Find功能实现2.4 迭代器初步功能实现2.4.1 运算符重载2.4.2 --运算符重载2.4.3 *运算符重载2.4.4 ->运算符重载2.4.5 !运算符重载2.4.6 begin()2.4.7 end() 2.5 迭代器进阶功能实现2.5.1 set…

新三消示例项目《Gem Hunter》中的光照和视觉效果

《Gem Hunter》是 Unity 的全新官方示例项目&#xff0c;展示了如何在 Unity 2022 LTS 使用通用渲染管线 (URP) 打造抢眼的光效和视效&#xff0c;让 2D 益智/三消游戏在竞争中脱颖而出。 下载示例项目及其说明文档。准备潜入清澈湛蓝的海水中探寻财富吧&#xff0c;因为那里到…

单向循环链表C语言实现实现(全)

#include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FASLE 0//定义宏标识判断是否成功 typedef struct Node {int data;struct Node* next; }Node;Node* InitList() {Node* list (Node*)malloc(sizeof(Node));list->data 0;//创建节点保存datalist…

【AI大模型】赋能【传统业务】

在数字化转型的浪潮下&#xff0c;传统业务流程&#xff08;如通知公告管理、文档处理等&#xff09;仍依赖人工操作&#xff0c;面临效率低、成本高、易出错等问题。以企业通知公告为例&#xff0c;从内容撰写、摘要提炼到信息分发&#xff0c;需耗费大量人力与时间&#xff0…

团结引擎开源车模 Sample 发布:光照渲染优化 动态交互全面体验升级

光照、材质与交互效果的精细控制&#xff0c;通常意味着复杂的技术挑战&#xff0c;但借助 Shader Graph 14.1.0(已内置在团结引擎官方 1.5.0 版本中)&#xff0c;这一切都变得简单易用。通过最新团结引擎官方车模 Sample&#xff0c;开发者能切身感受到全新光照优化与编辑功能…

精准测量“双雄会”:品致与麦科信光隔离探头谁更胜一筹

在电子技术飞速发展的当下&#xff0c;每一次精准测量都如同为科技大厦添砖加瓦。光隔离探头作为测量领域的关键角色&#xff0c;能有效隔绝电气干扰&#xff0c;保障测量安全与精准。在众多品牌中&#xff0c;PINTECH品致与麦科信的光隔离探头脱颖而出&#xff0c;成为工程师们…

NSSCTF [HNCTF 2022 WEEK4]

题解前的吐槽&#xff1a;紧拖慢拖还是在前段时间开始学了堆的UAF(虽然栈还没学明白&#xff0c;都好难[擦汗])&#xff0c;一直觉得学的懵懵懂懂&#xff0c;不太敢发题解&#xff0c;这题算是入堆题后一段时间的学习成果&#xff0c;有什么问题各位师傅可以提出来&#xff0c…