【MySQL 数据宝典】【内存结构】- 003 Change Buffer 详解

MySQL(六):InnoDB 变更缓冲区(Change Buffer) 文章目录1、简述2、配置变更缓冲区3、配置变更缓冲区最大大小4、监视变更缓冲区5、==变更缓冲区==常见问题5.1、哪些类型的操作会修改二级索引并导致修改缓存?5.2、InnoDB ==变更缓冲区== 的存在有什么好处?5.3、==变更缓冲区==是否支持其他类型的索引?5.4、InnoDB将多少空间用于==变更缓冲区==?5.5、如何确定 ==变更缓冲区== 的当前大小?5.6、何时会发生==变更... 阅读详情

一、 Change Buffer基本概念

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

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

ChangeBuffer占用BufferPool空间,默认占25%,最大允许占50%,可以根据读写 业务量来进行调整。参数innodb_change_buffer_max_size;

img

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

二、 Change Buffer更新流程

  • 情况1: 对于唯一索引来说,需要将数据页读入内存,判断到没有冲突,插入这个值,语句执行结束;
  • 情况2: 对于普通索引来说,则是将更新记录在 change buffer,流程如下:
  1. 更新一条记录时,该记录在BufferPool存在,直接在BufferPool修改,一次内存操作。

  2. 如果该记录在BufferPool不存在(没有命中),在不影响数据一致性的前提下,InnoDB 会将这些更新操作缓存在 change buffer 中不用再去磁盘查询数据,避免一次磁盘IO。

  3. 当下次查询记录时,会将数据页读入内存,然后执行change buffer中与这个页有关的操作.通过这种方式就能保证这个数据逻辑的正确性。

img

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

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

什么情况下进行 merge ?

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

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

Change Buffer 的使用场景

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

三、 Change Buffer VS 刷脏

特点Change Buffer刷脏(Flush)
作用对象对索引的修改操作将内存中的脏数据写入磁盘上的数据文件中
操作对象索引数据页
触发条件索引的修改系统checkpoint、redo log写满等因素触发
性能影响可提高写入性能可能影响性能,特别是在高负载情况下

当你发现这些内容对你有帮助时,为了支持我的工作,不妨给一个免费的⭐Star,这将是对我最大的鼓励!感谢你的陪伴与支持!一起在技术的路上共同成长吧!点击链接:GitHub | Gitee

ADS8681数据手册没讲透的细节:SPI时序、量程切换与电压换算的避坑指南 本文深入解析ADS8681数据手册未提及的SPI时序优化、量程切换陷阱与电压校准技巧。针对树莓派5与ADS8681的SPI通信问题,提供CPOL/CPHA配置建议;详解量程切换的位操作玄机与寄存器配置流程;并提出三步校准法应对非理想供电环境,帮助开发者提升ADC测量精度。 阅读详情

相关推荐

【HAL库-STM】智能温控按键小风扇【胎教级教学】

硬件设备:DHT11,0.96寸oled屏,二/三/四线风扇(不挑),面包板 、f10的精英板等等。当人在的风扇面前时可以自行控制风扇,不在面前时又想开风扇就让他温控自行开启,(在这里有一个想法就是加上蓝牙和wifi控制的功能能够远程遥控,这个如果做的再全一点就要自主研发是一个多功能app,这里没有做。针对这个dht11,我一开始是卡在了这个check函数里面,一直是我给完dht11低电平和高电平后,dht11不回复我低电平和高电平,这个不是我的问题,当时代码是没毛病的,这个点一直卡着我。吐血五天实现小成品

weixin_52451652的博客 1740

MySQL十七:Change Buffer

在中介绍了buffer pool会缓存热的数据页和索引页,减少磁盘读操作,而对于磁盘的写操作,innoDB同样也有类似的策略,即通过change buffer缓解磁盘写操作产生的磁盘IO。

Edwin_Hu的博客 3506

【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(下篇)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2237

MySQL Change Buffer 深入解析:概念、原理及使用

MySQL的InnoDB存储引擎中有一个非常有用的特性,名为Change Buffer。它是一种优化技术,旨在减少对磁盘的I/O操作,从而提高数据库的性能。本文将深入探讨Change Buffer的原理,以及如何利用它来优化数据库性能。

码到三十五 1万+

Excel-MCP实战指南:零代码实现大模型与Excel的智能交互

本文详细介绍了Excel-MCP工具如何实现大模型与Excel的无缝交互,无需编写代码即可完成数据读写、图表生成等复杂操作。通过实战案例展示了Excel-MCP在销售报表自动化、财务对账等企业级场景中的应用,大幅提升工作效率。文章还提供了安装指南、核心功能解析和常见问题解决方案。

weixin_29212429的博客 433

如何在高版本的ubuntu系统里安装gcc4.1.2

1、下载安装包,一共五个http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-4.1/,根据计算机系统位数   进行下载,64位下载amd64结尾的。开头分别是cpp-4.1_4.1.2、g++-4.1_4.1.2、gcc-4.1-base_4.1.2、gcc-     4.1_4.1.2、libstdc++6-4.1 2、使用sudo d

lsr_fighting的博客 1931

change buffer(写缓冲)

文章目录1.1 什么是change buffer1.2 change buffer 原理1.3 change buffer为什么针对非唯一普通索引页1.4 相关变量1.5 监控指标 1.1 什么是change buffer   在MySQL中数据分为内存和磁盘两个部分;在buffer pool中缓存热的数据页和索引页,减少磁盘读;通过change buffer就是为了缓解磁盘写的一种手段。   change buffer就是在非唯一普通索引页不在buffer pool中时,对页进行了写操作的情况下,先将记录

雪辉博客 7533

【软考高级架构】案例题考前突击6——大数据架构

前一类的数据主要由流量方以接口的方式提供(比如对接的腾讯广点通平台),后一类则是某网特有的数据,通过买家的浏览、下单、付款日志算出来。1. 在数据层面只维护一张包含所有指标的MySQL表,表中的stday字段作为索引,stday=当天的保存实时数据,stday<当天的保存离线数据。典型的大数据架构,除了Lambda架构之外,还有kappa架构,这两个架构的区别如下标所示,请补充表中空(1)-(4)第二,实时数据只对接了内部的kafka消息,没有实时的获取第三方的曝光、点击、浏览数据。

qq837993702的博客 66

一文带你了解MySQL之Change Buffer

更改缓冲区是一种特殊的数据结构,当二级索引页不在缓冲池中时,它将更改缓存到二级索引页。缓冲的更改可能来自INSERT、UPDATE或DELETE操作(DML),稍后当其他读操作将页面加载到缓冲池中时,这些更改将被合并。

Multis 1577

华为云物联网系统开发(纯云端)外包方案及项目需求说明书

提供一个详细的需求文档(SRS,Software Requirements Specification),用于指导完全零基础的非专业负责人外包兼职专业技术人员开发一款基于华为云物联网平台、Astro低代码平台和Astro Canvas大屏设计的物联网系统,纯软件实现并支持下载部署。文档涵盖详细的软硬件组成清单(聚焦软件和云服务)、技术文档要求等,确保非专业人员在移交后能够复用、扩展和操作该系统。本文档简洁、全面,适合非技术背景的管理者使用,并基于华为云生态的内部实施部署。

hy行者勇哥的博客 620

YOLOv11改进 - C3k2融合 | C3k2 融合 ARConv 自适应矩形卷积:动态调整卷积核形状与采样点

本文介绍了将自适应矩形卷积(ARConv)模块与YOLOv11相结合的方法。ARConv是针对遥感图像全色锐化任务设计的创新卷积模块,可自适应调整卷积核形状与采样点数量,解决传统卷积刚性限制,实现高效特征提取。其工作流程包括学习卷积核高度和宽度、选择采样点数量、生成采样图、卷积实现与空间自适应增强。我们将集成ARConv的C3k2_ARConv模块引入YOLOv11,对相关代码进行修改和注册,并配置了yolov11 - C3k2_ARConv.yaml文件。实验脚本显示,该结合方式应用于目标检测任务。

魔改工程师的博客 1005

Change Buffer详解

change Buffer

tom的博客 2572

深度学习在移动开发中的应用:实时姿态估计实战

我们将使用TensorFlow Lite框架,结合专为移动端优化的MoveNet模型,实现一个能够在主流Android设备上达到30FPS的多人姿态跟踪解决方案,并深入探讨其优化技巧和实际应用场景。特别是3D姿态估计、多人长期跟踪等前沿技术的发展,将进一步推动移动端姿态估计技术的应用深度和广度。在下一篇文章中,我们将探讨深度学习在移动端的另一个创新应用:实时手势识别,包括如何在资源受限的环境中实现复杂手势的实时识别,以及这项技术在AR/VR交互、智能家居控制等场景中的应用。第四部分:典型应用场景实现。

Programming Talk 325

MySQL 的 Change Buffer 是什么?它有什么作用?

是 MySQL InnoDB 存储引擎中的一个缓存机制,它用于缓存对非主键索引(Secondary Indexes)页的更改。这个缓存区的主要目的是延迟对这些索引页的写操作,以减少磁盘 I/O,从而提升数据库的写性能。**简单来说,当我们对数据库中的二级索引执行插入、删除或更新操作时,这些操作并不会立即写入磁盘。**而是将它们先存放在 Change Buffer 中,直到相关的索引数据页被读取时,才会将这些更改刷写到磁盘。为什么 Change Buffer 只对非唯一普通索引页有效?

Z1tai的博客 1752

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

写缓冲(change buffer),这次彻底懂了!!!

上篇《缓冲池(buffer pool),彻底懂了!》介绍了InnoDB缓冲池的工作原理。简单回顾一下:(1)MySQL数据存储包含内存与磁盘两个部分;(2)内存缓冲池(...

shenjian58的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL 中 Change Buffer 是什么,有什么用?

Change Buffer 是 MySQL 中 InnoDB 存储引擎用于优化写操作(主要是插入、更新、删除,即 DML 操作 )性能的一种数据结构,它是缓冲池(Buffer Pool )的一部分。

weixin_43521001的博客 853

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

写缓冲(change buffer)

简单回顾一下: (1)MySQL数据存储包含内存与磁盘两个部分; (2)内存缓冲池(buffer pool)以页为单位,缓存最热的数据页(data page)与索引页(index page); (3)InnoDB以变种LRU算法管理缓冲池,并能够解决“预读失效”与“缓冲池污染”的问题; 画外音:细节详见《缓冲池(buffer pool)》。 毫无疑问,对于读请求,缓冲池能够减少...

耿小渣的进阶之路 1167

mysql的change buffer

change buffer 的作用 当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InooDB 会将这些更新操作缓存在 change buffer 中,这样就不需要从磁盘中读入这个数据页了。在下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行 change buffer 中与这个页有关的操作。通过这种方式就能保证这个数据逻辑的正确性。 需要说明的是,虽然名字叫作 change buffer,实际上它是可以持久化的数据。也就

qq_33300570的博客 2917

MySQL:详解 change buffer

在下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行 change buffer 中与这个页有关的操作。因为 merge 的时候是真正进行数据更新的时刻,而 change buffer 的主要目的就是将记录的变更动作缓存下来,所以在一个数据页做 merge 之前,change buffer 记录的变更越多,即这个页面上要更新的次数越多,收益就越大。当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的。的过程中,也会执行 merge 操作。

向北~的博客 489

MySQL 之 InnoDB引擎 Change Buffer

Change Buffer Change Buffer是一种特殊的数据结构,缓存对二级索引页面的更改并且这些页面不在Buffer Pool中。缓存的changes可能由 Insert 、Delete 和 Update的结果导致。稍后在页面被其他读取操作加载到Buffer Pool的时候合并。 Buffer Pool的研究在我的这篇里有:https://blog.youkuaiyun.com/qq_3665...

心有猛虎 细嗅蔷薇 8910

MySQL的change buffer

这样随机访问 IO 的次数不会减少,反而增加了 change buffer 的维护代价,这个时候普通索引就不是最好的选择了。而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InnoDB会将这些更新操作缓存在 change buffer中,这样就不需要从磁盘中读入这个数据页了。第二种情况是,这个记录要更新的目标页不在内存中。唯一索引,找到 3 和 5 之间的位置,判断到没有冲突,插入这个值,语句执行结束;唯一索引,需要将数据页读入内存,判断到没有冲突,插入这个值,语句执行结 束;......

qq_48157004的博客 2566

MySQL:change buffer

1、change buffer InnoDB的数据是按数据页为单位来读写的。也就是说,当需要读一条记录的时候,并不是将这个记录本身从磁盘读出来,而是以页为单位,将其整体读入内存。在InnoDB中,每个数据页的大小默认是16KB。 在更新数据页时,首先去内存中查看是否有这个数据页,如果在内存中有,就直接更新;如果内存中没有这个数据页的话,InnoDB就会将这些更...

sayoko06的博客 1299

SpringCloud(一)

简介 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 SpringCloud前言一、SpringCloud是什么?二、使用步骤1.引入库2.读入数据总结 前言 q.qq qqqqqq 一、SpringCloud是什么? pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt

qq_38663629的博客 460

一文带你搞懂MySQL的Change Buffer

Change Buffer 是 InnoDB 的一个特殊区域, 是 InnoDB 存储引擎为了**优化对非唯一二级索引页的修改操作**而设计的一个机制。它的核心目标是:**延迟并合并对非唯一二级索引页的磁盘写入,以减少磁盘 I/O,提高性能。在数据库中,当我们执行 `INSERT、UPDATE、DELETE`操作时,除了更新主键(聚簇索引)对应的行数据外,**还必须更新所有相关的二级索引**(普通索引)**1 满足条件:修改的是非唯一索引**| **参数** | **含义** |

殊途的博客 1084

mysql中的change_MySQL中的change buffer

参考:https://blog.youkuaiyun.com/weixin_38304221/article/details/88635432https://blog.youkuaiyun.com/nanjingitany/article/details/102856472https://www.cnblogs.com/abclife/p/7625281.htmlhttps://www.cnblogs.com/ging/...

weixin_34005394的博客 510

一文了解MySQL写缓冲Change Buffer(定义 作用 执行过程 触发时机 业务场景)

介绍了写缓冲的定义和作用,并且举了2个例子介绍了执行过程,触发时机、刷数据时机、优缺点、业务场景、配置和对比等

LightOfNight的博客 1396
上一篇: 【MySQL 数据宝典】【内存结构】- 002 Page管理机制
下一篇: 【MySQL 数据宝典】【内存结构】- 004 自适应哈希索引
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值