Change Buffer详解

这篇具有很好参考价值的文章主要介绍了Change Buffer详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

change Buffer基本概念

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

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

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

  • 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中与这个页有关的操作.通过这种方式就能保证这个数据逻辑的正确性
    Change Buffer详解
写缓冲区,仅适用于非唯一普通索引页,为什么?

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

什么情况下进行merge?

将 change buffer 中的操作应用到原数据页,得到最新结果的过程称为merge
change buffer,实际上它是可以持久化的数据。也就是说,change buffer 在内存中有拷贝,也会被写入到磁盘上
以下情况会进行持久化:文章来源地址https://www.toymoban.com/news/detail-430842.html

  • 访问这个数据页会触发merge
  • 系统有后台线程会定期merge
  • 在数据库正常关闭(shutdown)的过程中,也会执行merge 操作
Change Buffer 的使用场景
  • change buffer 的主要目的就是将记录的变更动作缓存下来,所以在merge发生之前应当尽可能多的缓存变更信息,这样 change buffer的优势发挥的就越明显
  • 应用场景: 对于写多读少的业务来说,页面在写完以后马上被访问到的概率比较小,此时change buffer 的使用效果最好。这种业务模型常见的就是账单类、日志类的系统

到了这里,关于Change Buffer详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MongoDB之Change Stream实战

    Change Stream 指数据的变化事件流,MongoDB 从 3.6 版本开始提供订阅数据变更的功能。 Change Stream 是 MongoDB 用于实现变更追踪的解决方案,类似于关系数据库的触发器,但原理不完全相同: Change Stream 触发器 触发方式 异步 同步(事务保证) 触发位置 应用回调事件 数据库触发器

    2024年01月23日
    浏览(39)
  • Angular 17+ 高级教程 – Change Detection

    虽然 Angular 正在把大部分 Change Detection 概念换成 Signal,但是最快也要 1 年后,所以还是有必要认真学习一下的。   MVVM 框架的开发方式是这样的: 写 HTML 写 ViewModel 在 HTML 里加入 binding syntax。 在 HTML 里加入 listening syntax,在事件发生时修改 ViewModel。 MVVM 的宗旨是 \\\"不要直接

    2024年03月09日
    浏览(42)
  • Oracle change port 1521 TCPs

    col name for a20 col value for a200 select name ,value from gv$parameter a where a.NAME like \\\'%listener%\\\'; (ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.6)(PORT=1521)),(ADDRESS=(PROTOCOL=TCPS)(HOST=x.x.x.6)(PORT=1522))  prod1-scan:1521 (ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.7)(PORT=1521)),(ADDRESS=(PROTOCOL=TCPS)(HOST=x.x.x.7)(PORT=1522))  prod1-scan:1521 (ADDRESS=(PROTO

    2024年02月14日
    浏览(43)
  • DB Change Manager Multiplatform Crack

    DB Change Manager/Data Compare now includes updated support for copying data when using Microsoft Azure SQL. DB Change Manager helps database administrators and developers simplify, automate, and report on database changes as well as streamline development cycles and ensure availability, performance and compliance. DB Change Manager’s compare, synchronizat

    2024年02月07日
    浏览(33)
  • ftp 550 Failed to change directory

    当收到 \\\"550 Failed to change directory\\\" 的错误消息时,表示尝试更改目录时出现问题。这个错误通常与FTP(文件传输协议)或类似的文件传输工具有关。 \\\"550 Failed to change directory\\\" 错误消息通常有以下几种可能的原因: 目标目录不存在:要更改到的目录可能不存在。请确保目标目录

    2024年02月05日
    浏览(44)
  • 零钱兑换(Coins Change) -动态规划C语言实现

    1. 前言 零钱兑换是经典的动态规划问题,也是贪心解法不足的反证答案。它要求兑换一定总整数的零钱,满足硬币数量最少的条件。假定我们有3类零钱,构成数组coins[]={1,7,10},现在兑换总额14的金额,如果采用贪心策略,我们有10+1+1+1+1=14, 共需要5枚硬币。实际上本题的最少

    2024年02月09日
    浏览(53)
  • git 生成change-id的解决方法

    1,在提交代码时的信息会要求添加change-id的要求,但对于默认的git来说,是不会自动生成change-id的 2,当git push的时候,报错 remote: ERROR: commit 7c30eda: missing Change-Id in message footer 如果输入之后有下面的错误: 不要在vscode中输入命令,而是在git bush中输入命令 输入命令不报错之

    2024年02月06日
    浏览(29)
  • js中select 选择器的 change 事件处理函数

    select 元素的 change 事件是当用户选择了不同的选项时触发的事件。你可以在 select 元素上添加 change 事件的监听器,以便在用户进行选择时执行相应的操作。 change 事件处理函数可以使用 Event.target 属性来获取触发事件的 select 元素,并使用 select.value 属性来获取当前选中的选项

    2024年02月09日
    浏览(37)
  • el-select初始化触发change事件

    我今天在写一个表单校验的时候,两个下拉框,都用的el-select控件,其中一个校验是正常的,另一个页面初始化的时候就会触发校验 后来我发现添加了multiple(开始多选)就会在初始化的时候触发校验,可以理解为如果v-modle绑定的对象的键初始值没有设置,默认是underfind的,但

    2024年02月04日
    浏览(36)
  • PO change log 表 cdhdr username 更改 增强

    背景,外围系统接口账号更改替换为自建表维护的用户 通过SQL 跟踪查询 ST05 跟踪在有对CDHDR表的操作, 查找到函数  EINKBELEG_WRITE_DOCUMENT  /  CHANGEDOCUMENT_CLOSE 可以对函数username 入参 做增强 更改传输,修改为自己需要的用户 EINKBELEG_WRITE_DOCUMENT  为异步调用

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包