Change Buffer详解

news2024/11/26 9:43:34

change Buffer基本概念

Change Buffer:写缓冲区,是针对二级索引(辅助索引) 页的更新优化措施

作用: 在进行DML(写)操作(insert/update/delete)时,如果请求的是 辅助索引(非唯一键索引)没有在缓冲池 中时,并不会立刻将磁盘页加载到缓冲池,而是在Change Buffer记录缓冲变更,等未来数据被读取时,再将数据合并恢复到Buffer Pool中

ChangeBuffer占用BufferPool空间,默认占25%,最大允许占50%,可以根据读写业务量来进行调整
参数 innodb_change_buffer_max_size
在这里插入图片描述

  • ChangeBuffer用于存储SQL变更操作,比如Insert/Update/Delete等SQL语句
  • ChangeBuffer中的每个变更操作都有其对应的数据页,并且该数据页未加载到缓存中
  • 当ChangeBuffer中变更操作对应的数据页加载到缓存中后,InnoDB会把ChangeBuffer变更操作Merge到数据页上
  • InnoDB会定期加载ChangeBuffer中对应数据页的变更操作到缓存中,并Merge变更操作

change buffer更新流程

情况1: 对于唯一索引来说,需要将数据页读入内存,判断到没有冲突,插入这个值,语句执行结束
情况2: 对于普通索引来说,则是将更新记录在 change buffer,流程如下:

  • 更新一条记录时,当该记录在BufferPool缓存页中时,直接在BufferPool缓存页修改,一次内存操作
  • 如果当该记录不在BufferPool缓存页中,在不影响数据一致性的前提下,InnoDB 会将这些更新操作缓存在 change buffer 中不用再去磁盘查询数据,避免一次磁盘IO
  • 当下次查询记录时,会将数据页读入BufferPool缓存页,然后执行change buffer中与这个页有关的操作.通过这种方式就能保证这个数据逻辑的正确性
    在这里插入图片描述

写缓冲区,仅适用于非唯一普通索引页,为什么?

如果在索引设置唯一性,在进行修改时,InnoDB必须要做唯一性校验,因此必须查询磁盘,做一次IO操作。会直接将记录查询到BufferPool缓存页中,然后在缓冲池修改,不会在ChangeBuffer操作

什么情况下进行merge?

将 change buffer 中的操作应用到原数据页,得到最新结果的过程称为merge
change buffer,实际上它是可以持久化的数据。也就是说,change buffer 在内存中有拷贝,也会被写入到磁盘上
以下情况会进行持久化:

  • 访问这个数据页会触发merge
  • 系统有后台线程会定期merge
  • 在数据库正常关闭(shutdown)的过程中,也会执行merge 操作

Change Buffer 的使用场景

  • change buffer 的主要目的就是将记录的变更动作缓存下来,所以在merge发生之前应当尽可能多的缓存变更信息,这样 change buffer的优势发挥的就越明显
  • 应用场景: 对于写多读少的业务来说,页面在写完以后马上被访问到的概率比较小,此时change buffer 的使用效果最好。这种业务模型常见的就是账单类、日志类的系统

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

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

相关文章

多态

一、多态性概述 1、静态多态实现的两种方式:模板和函数重载 2、动态多态(一般上所说的多态都是指动态多态) 示例: 若执行pa->f(pa),则由动态编联找到派生类,而pa静态类型为A*,所以输出3若执行…

notepad++安装HexEditor插件查看二进制文件

文章目录 前言一、下载 HexEditor 插件二、解压文件三、将插件放置到 plugins 目录下四、重启软件测试 前言 有时候我们需要分析二进制文件,但是分析二进制文件直接用编辑器查看会出现乱码的情况,本文在 notepad 软件上安装一个 HexEditor 插件&#xf…

【Java笔试强训 19】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥汽水瓶 …

各大“排序”特性及稳定性总结

一、各个排序特性 二、各个排序的稳定性分析及例子 稳定性如何定义:排序算法的稳定性并不是指它在对数组进行排序的时候的时间复杂度是否变化,而是对于相同数值的数据进行排序了之后它们的相对位置是否发生了变化,比如说在考试的时候…

【Java笔试强训 18】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥统计每…

【Java笔试强训 16】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、判断题 🔥完全数计…

JAVA入坑之JAVADOC(Java API 文档生成器)与快速生成

目录 一、JAVADOC(Java API 文档生成器) 1.1概述 1.2Javadoc标签 1.3Javadoc命令 1.4用idea自带工具生成API帮助文档 二、IDEA如何生成get和set方法 三、常见快捷方式 3.1快速生成main函数 3.2快速生成println()语句 3.3快速生成for循环 3.4“…

【Python】序列类型①-列表

文章目录 1. 前言2. 列表的定义3. 列表的下标访问3.1 嵌套列表的下标 4. 列表的切片操作5. 列表的遍历5.1 使用for循环进行遍历5.2 while循环进行遍历 6.添加列表元素6.1 使用append方法添加元素6.2 使用insert方法添加元素 7. 列表的拼接7.1 使用 进行拼接7.2 使用extend 进行…

( 字符串) 696. 计数二进制子串 ——【Leetcode每日一题】

❓696. 计数二进制子串 难度:简单 给定一个字符串 s,统计并返回具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是成组连续的。 重复出现(不同位置&#xff09…

动态规划01背包问题

01背包问题 假设你是一名经验丰富的探险家,背着背包来到野外进行日常探险。天气晴朗而不燥热,山间的风夹杂着花香,正当你欣赏这世外桃源般的美景时,突然,你发现了一个洞穴,这个洞穴外表看起来其貌不扬&…

UE动画状态机的事件触发顺序测试

正常A状态过渡到B状态的事件顺序: 整个流程为: 调用B状态的On Become Relevant事件调用B状态的On Update事件调用A状态的Left State Event事件调用B状态的Entered State Event事件调用B状态的Start Transition Event事件调用B状态的End Transition Even…

网络安全:通过445端口暴力破解植入木马。

网络安全:通过445端口暴力破解植入木马。 木马制作工具,如:灰鸽子等等 445端口是文件共享端口。可以进入对方文件硬盘进行植入木马: 使用文件共享进入对方磁盘: 在cmd输入net use \\x.x.x.x\ipc$ 之后会让你输入账号…

Vue——组合式函数

目录 什么是“组合式函数”?​ 鼠标跟踪器示例​ 异步状态示例​ 约定和最佳实践​ 命名​ 输入参数​ 返回值​ 副作用​ 使用限制​ 通过抽取组合式函数改善代码结构 选项式 API 中使用组合式函数​ 与其他模式的比较​ 和 Mixin 的对比​ 和无渲染…

mybatis逆向生成器

目录 官网xml pom引入 在resources新建generatorConfig.xml xml修改 生成 官网xml MyBatis Generator Core – MyBatis Generator XML Configuration File Reference pom引入 <!-- mybatis逆向生成器 --><dependency><groupId>org.mybatis.gener…

anaconda 共享虚拟环境

需求背景 A,B,C… 多台服务器。 有一个公共的NAS服务器N&#xff0c;存储所有数据资料。 N分别挂载到A,B,C…服务器上&#xff0c;便于所有服务器访问数据。 挂载路径在所有服务器上统一为/nas/。 现状&#xff1a; A,B,C&#xff0c;… 上分别安装anaconda&#xff0c;分别创…

网络钓鱼仍然是安全行业的祸害

随着网络犯罪分子采用更先进的方法&#xff0c;网络钓鱼诈骗继续构成重大风险。 根据 Zscaler 最新发布的 2023 ThreatLabz 网络钓鱼报告&#xff0c;随着网络钓鱼工具包和ChatGPT等人工智能 (AI) 工具的广泛使用&#xff0c;网络犯罪分子比以往任何时候都更容易创建有针对性的…

数字图像处理-matlab图像内插

matlab图像内插 最近邻插值双线性插值双三次插值总结 最近邻插值 目标各像素点的灰度值代替源图像中与其最邻近像素的灰度值 参考博客 假设一个2X2像素的图片采用最近邻插值法需要放大到4X4像素的图片&#xff0c;右边该为多少&#xff1f; 最近邻插值法坐标变换计算公式&…

40.java-单列集合Set(HashSet,LinkedHashSet,TreeSet)

Set集合 1.Set集合特点2.Set集合实现类3. HashSet3.1 底层原理3.1.1 哈希表组成3.1.2 哈希值3.1.3 对象的哈希值特点 3.2 数据添加元素的过程3.3 HashSet的三个问题3.4 实例&#xff1a;去除重复元素 4. LinkedHashSet5. TreeSet5.1 特点5.2 集合默认规则5.3 例子5.4 两种比较规…

泛型——List 优于数组

数组与泛型有很大的不同&#xff1a; 1. 数组是协变的&#xff08;covariant&#xff09; 意思是&#xff1a;如果Sub是Super的子类型&#xff0c;则数组类型Sub[] 是数组类型Super[] 的子类型。 2. 泛型是不变的&#xff08;invariant&#xff09; 对于任何两种不同的类型Ty…

Linux下进程间通信

Linux下进程间通信 进程间通信的目的进程间通信的手段的分类管道什么是管道管道原理匿名管道创建匿名管道文件匿名管道的特点匿名管道的4种场景 有名管道有名管道的创建有名管道总结命名管道的打开规则 system V 共享内存共享内存原理建立通信回收共享内存开始通信命令操作共享…