MySQL 的 Change Buffer 是什么?它有什么作用?
MySQL 的 Change Buffer
1. 什么是 Change Buffer?
Change Buffer 是 MySQL InnoDB 存储引擎中的一个优化机制,用于减少磁盘 I/O 操作。它是一个专门用来缓存 非唯一二级索引变更操作 的内存区域,位于 InnoDB 的 Buffer Pool 中。
当对非唯一二级索引执行插入、更新或删除操作时,MySQL 并不会立即将这些变更写入磁盘,而是将变更记录存入 Change Buffer,稍后再合并到物理页面中。
2. Change Buffer 的作用
(1)减少磁盘 I/O
将索引页的变更操作缓存起来,避免频繁的随机磁盘读写操作,从而提升性能。
(2)提升写入性能
对于非唯一二级索引的修改操作:
- 如果目标索引页已在内存中,直接更新内存中的页。
- 如果目标索引页不在内存中,将变更写入 Change Buffer,延迟加载目标页,从而减少磁盘读取。
(3)批量合并
当后台线程或需要访问相关索引页时,MySQL 将 Change Buffer 的内容与实际的物理页面进行合并(称为 merge 操作)。这种批量合并可以提高效率。
3. Change Buffer 的适用场景
Change Buffer 仅适用于 非唯一二级索引 的修改操作:
- 非唯一二级索引的插入(Insert Buffering)
- 非唯一二级索引的更新(Delete-Mark Buffering 和 Insert Buffering)
- 非唯一二级索引的删除(Delete Buffering)
主键索引和唯一索引 无法使用 Change Buffer,因为它们需要立即验证唯一性。
4. Change Buffer 的管理
(1)参数配置
innodb_change_buffer_max_size 用于控制 Change Buffer 占用 Buffer Pool 的比例(百分比),默认值为 25。
SET GLOBAL innodb_change_buffer_max_size = 50;
该参数的取值范围为 0 到 50,设置为 0 时禁用 Change Buffer。
(2)合并时机
Change Buffer 的合并操作发生在以下时机:
- 查询需要访问相关索引页时。
- 后台线程(如主线程)空闲时执行异步合并。
- 数据页从磁盘加载到内存时。
(3)持久化
Change Buffer 的内容保存在系统表空间中,保证在 MySQL 重启后仍然有效。
5. Change Buffer 的优势
- 性能提升
- 避免频繁的随机磁盘 I/O,提升插入和更新性能。
- 高效资源利用
- 利用内存缓存变更,提高磁盘访问效率。
- 适用于批量写入场景
- 批量插入、更新非唯一二级索引时,Change Buffer 的效果尤为显著。
6. Change Buffer 的限制
- 适用范围有限
- 仅支持非唯一二级索引的修改,主键索引和唯一索引无法使用。
- 占用内存资源
- Change Buffer 位于 Buffer Pool 中,占用一定内存资源,可能影响其他缓存的效率。
- 可能增加磁盘负载
- 当 Change Buffer 内容较多时,后台合并操作会增加磁盘 I/O。
7. Change Buffer 的使用示例
创建非唯一二级索引
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT,
INDEX (age)
) ENGINE=InnoDB;
对于 age 列上的非唯一二级索引插入操作:
- 如果目标页不在内存中,变更会写入 Change Buffer,而不是立即加载索引页。
- 后续访问或后台线程会将 Change Buffer 中的内容合并到磁盘页中。
8. 总结
- Change Buffer 是 InnoDB 用于优化非唯一二级索引写入性能的重要机制。
- 它通过将变更缓存在内存中,减少磁盘 I/O,提升写入性能。
- 适用于大量插入、更新非唯一二级索引的场景,但需要注意内存和磁盘资源的平衡。
MySQL 的 Change Buffer 是什么?它有什么作用?的更多相关文章
- mysql 原理 ~ change buffer
一 简介:今天咱们来聊聊mysql的change buffer二 详细说明 1 +-change Buffer和数据页一样,也是物理页的一个组成部分,数据结构也是一颗B+树,这棵B+树放在共享表空 ...
- MySQL:change buffer
1. 概念 Innodb维护了一个缓存区域叫做Buffer Pool,用来缓存数据和索引在内存中.其大小通过参数 innodb_buffer_pool_size 控制: change buffer 是 ...
- 全网最清楚的:MySQL的insert buffer和change buffer 串讲
目录 一.前言 二.问题引入 2.1.聚簇索引 2.2.普通索引 三.change buffer存在的意义 四.再看change buffer 五.change buffer 的限制 六.change ...
- MySQL -- Innodb中的change buffer
change buffer是一种特殊的数据结构,当要修改的辅助索引页不在buffer pool中时,用来cache对辅助索引页的修改.对辅助索引页的操作可能是insert.update和delete操 ...
- Mysql InnoDB三大特性-- change buffer
Mysql InnoDB三大特性-- change buffer
- 【MySQL 5.7 Reference Manual】15.4.2 Change Buffer(变更缓冲)
15.4.2 Change Buffer(变更缓冲) The change buffer is a special data structure that caches changes to se ...
- MySQL 5.7 Reference Manual】15.4.2 Change Buffer(变更缓冲)
15.4.2 Change Buffer(变更缓冲) The change buffer is a special data structure that caches changes to se ...
- mysql小特性:change buffer
change buffer是在其他数据库中没有的一个概念,说白了就是一块系统表空间分配的空间,针对的对象是辅助索引的叶子节点(为什么不是主键索引?因为主键索引是聚集索引,在磁盘上的排列是有序的,磁盘的 ...
- MySql 缓冲池(buffer pool) 和 写缓存(change buffer) 转
应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库. 操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问. M ...
- MySQL 数据库的提速器-写缓存(Change Buffer)
写缓存(Change Buffer) 是一种特殊的数据结构,用于在对数据变更时,如果数据所在的数据页没有在 buffer pool 中的话,在不影响数据一致性的前提下,InnoDB 引擎会将对数据的操 ...
随机推荐
- 0415-File类和FileFilter接口
package demoFile; import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; imp ...
- Forrester Wave™报告:天翼云三项产品能力获评最高分!
8月5日,国际权威研究机构Forrester发布了<Forrester Wave: 中国公有云平台厂商评测,2024Q3>报告.中国电信天翼云凭借前瞻性的发展战略和领先的产品能力,跻身行业 ...
- Linux Bridge和Tap关系详解
本文分享自天翼云开发者社区<Linux Bridge和Tap关系详解>,作者:x****n Linux Bridge介绍 Bridge(桥)是Linux上用来做TCP/IP二层协议交换的设 ...
- SqlServer中根据某几列获取重复的数据将其删除并保留最新一条
有时候,我们某个数据表中,可能有几列的数据都是一样的,此时我们可能想查询出这几列数据相同的所有数据行,并保留最新一条,将其他重复的数据删除. 1.ROW_NUMBER函数 假设我们有如下数据表: 此时 ...
- windows10专业版代码永久激活
1."Win+R"打开运行对话框,输入命令slmgr.vbs -xpr 可以查看当前系统的激活信息 2. 在电脑图标右键,打开属性,查看自己win10系统版本 3. 在开始菜单右键 ...
- 如何给本地部署的DeepSeek投喂数据,让他更懂你
写在前面 在上一篇文章中,我们说了怎么在本地部署DeepSeek.对本地部署DeepSeek感兴趣的小伙伴看过来. 本地部署 DeepSeek:小白也能轻松搞定! 话说回来了,为啥要本地部署呢? ① ...
- Deepseek学习随笔(7)--- 构建私人知识库(附网盘链接)
Step 1:创建知识库 入口定位 登录 DeepSeek 控制台 → 左侧导航栏点击「知识库」→ 点击「新建知识库」按钮 基础设置 知识库名称:建议使用「领域+用途」命名法,如「医疗-糖尿病文献库」 ...
- 生成式 AI 的发展方向,是 Chat 还是 Agent?
一.整体介绍 生成式 AI 在当今科技领域的发展可谓是日新月异,其在对话系统(Chat)和自主代理(Agent)两个领域都取得了显著的成果. 在对话系统(Chat)方面,发展现状令人瞩目.当前,众多智 ...
- PIP 换源:提升 Python 包安装速度的秘诀
一.引言 在使用 Python 进行开发时,我们经常需要通过 pip 命令安装各种库和依赖.然而,默认的源可能会因为网络原因导致下载速度缓慢,影响开发效率.这时候,换源就成为了一个非常实用的技巧. 二 ...
- Shell - shell中的运算符
基本语法 使用案例 基本语法 $((运算式)) $[ 运算式 ] 使用案例 # 第一种写法 a=10 b=20 c=`expr ${a} + ${b}` echo "$c" # 第 ...