MYSQL系列之 change buffer 和 redo log

MySQL学习笔记-change buffer 和 redo log 文章目录MySQL学习笔记-change buffer 和 redo log1.笔记图2.索引类型对查询性能的影响3.索引类型对更新性能的影响4.普通索引和唯一索引该怎么选择5.change buffer 和 redo log MySQL学习笔记-change buffer 和 redo log 在给 MySQL 建立二级索引的时候,从唯一性约束来说可以分为普通索引和唯一索引,但你知道这两种索引在查询和更新数据的时候性能有什么区别吗?然后 change buffer 和 redo log 的联系是什么呢?这 阅读详情

读丁奇大佬课程笔记与思考 课程链接

WAL技术(Write-Ahead Logging) 先写日志,再写磁盘:

当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log(粉板)里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。
刚刚update的语句还在缓存中未持久化磁盘,此时select是直接读取内存

redo log

InnoDB的redo log固定大小,比如可配置一组四个文件,每个文件1G,有两个指针,write pos记录当前写位置,边写边后移,checkpoint记录当前更新到文件的位置。write pos追上checkpoint,表示满了,停下来进行部分保存。
有了redo log,InnoDB就可以保证即便数据库发生异常启动,之前的记录不会丢失,此能力叫 crash-safe

change buffer

当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InnoDB 会将这些更新操作缓存在 change buffer 中,这样就不需要从磁盘中读入这个数据页了。在下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行 change buffer 中与这个页有关的操作。通过这种方式就能保证这个数据逻辑的正确性。

注意:
1、唯一索引不会用到 change buffer,插入值时,会查询数据是否唯一,也就没有必要用change buffer,所以唯一索引一定意义上会影响性能(如果buffer pool上有数据)
2、适合写多读少的场景

插入一条数据的过程

插入一条数据: insert into t(id,k) values(id1,k1),(id2,k2);
假设当前 k 索引树的状态,查找到位置后,k1 所在的数据页在内存 (InnoDB buffer pool) 中,k2 所在的数据页不在内存中

在这里插入图片描述
分析这条更新语句,你会发现它涉及了四个部分:内存、redo log(ib_log_fileX)、 数据表空间(t.ibd)、系统表空间(ibdata1)。
这条更新语句做了如下的操作(按照图中的数字顺序):
1、Page 1 在内存中,直接更新内存。
2、Page 2 没有在内存中,就在内存的 change buffer 区域,记录下“我要往 Page 2 插入一行”这个信息。
3、将上述两个动作记入 redo log 中(图中 3 和 4)。
做完上面这些,事务就可以完成了。所以,你会看到,执行这条更新语句的成本很低,就是写了两处内存,然后写了一处磁盘(两次操作合在一起写了一次磁盘),而且还是顺序写的。

查询一条语句的过程

在这里插入图片描述
1、读 Page 1 的时候,直接从内存返回。WAL 之后如果读数据,是不是一定要读盘,是不是一定要从 redo log 里面把数据更新以后才可以返回?其实是不用的。你可以看一下图 3 的这个状态,虽然磁盘上还是之前的数据,但是这里直接从内存返回结果,结果是正确的。
2、要读 Page 2 的时候,需要把 Page 2 从磁盘读入内存中,然后应用 change buffer 里面的操作日志,生成一个正确的版本并返回结果。
可以看到,直到需要读 Page 2 的时候,这个数据页才会被读入内存。
所以,如果要简单地对比这两个机制在提升更新性能上的收益的话,redo log 主要节省的是随机写磁盘的 IO 消耗(转成顺序写),而 change buffer 主要节省的则是随机读磁盘的 IO 消耗。

MySQL 为什么需要 redo log? 1. 谁的 redo log 学习 redo log,我觉得首先要搞明白一个问题,就是是谁的 redo log? 我们知道,MySQL 架构整体上分为两层:Server 层和存储引擎层,如下图: 前面松哥文章+视频跟大家聊的 binlog,是 MySQL 自己提供的 binlog,而 redo log 则不是 MySQL 提供的,而是存储引擎 InnoDB 自己提供的。所以在 MySQL 中就存在两类日志 binlog 和 redo log,存在两类日志既有历史原因(InnoDB 最早不是 . 阅读详情

相关推荐

mysql innodb架构分析

此文章将分析mysql innodb的架构

weixin_44550507的博客 1136

mysql的WAL技术是什么_什么是WAL?

在写完上一篇《Pull or Push》之后,原本计划这一片写《存储层设计》,但是临时改变主意了,想先写一篇介绍一下消息中间件最最基础也是最核心的部分:write-ahead logging(WAL)。什么是WAL"In computer science, write-ahead logging (WAL) is a family of techniques for providing atomi...

weixin_30311521的博客 3621

OptiSystem仿真:波分与时分复用混合光网络的设计与性能优化

本文详细介绍了如何利用OptiSystem软件设计与优化波分复用与时分复用混合光网络。通过构建四路波分乘以四路时分的系统模型,文章阐述了从信源生成、复用合并、光纤传输到信号解复用与性能评估的全流程,并重点探讨了对抗色散、优化器件参数及探索高级调制格式等核心性能优化策略,为应对未来海量数据需求提供了高效、可行的仿真解决方案。

pink的博客 1106

什么是 WAL 技术?它有什么特点?

WAL技术的核心思想是在对数据库进行任何修改之前,先将相应的日志记录写入到持久化的日志文件中。先写日志,再写数据:在WAL技术中,对数据库的修改操作首先被写入到日志文件中,然后再将修改后的数据写入到磁盘。通过读取日志文件中的日志记录,可以将这些操作应用到数据库中,从而恢复到崩溃前的一致性状态。顺序写入的特性使得WAL技术在性能上具有优势,因为磁盘的顺序写入速度通常比随机写入速度更快。需要注意的是,WAL技术是一种通用的数据库事务日志技术,在不同的数据库管理系统中可能会有一些细微的差异。

qq_52896055的博客 1516

arcgis select by attributes一次选多个_视频:如何基于ArcGIS与GeoDa求莫兰指数和绘制莫兰散点图?...

莫兰指数是全域莫兰指数(Global Moran's I)的简称,是澳大利亚统计学家帕特里克·阿尔弗雷德·皮尔斯·莫兰(Patrick Alfred Pierce Moran),在1950年提出的。详细介绍,如下:莫兰指数取值范围在-1.0至1.0之间。当Moran's I >0时,表示空间正相关性,其值越大,空间相关性越明显;当Moran's I <0时,表示空间负相关性...

weixin_39948247的博客 1759

碳化硅外延层厚度测量:红外干涉光谱与FFT技术详解

薄膜厚度测量是半导体制造中的关键工艺控制环节,其核心原理基于光的干涉现象。当光在薄膜上下界面反射并叠加时,会产生与厚度相关的干涉条纹。通过分析这些条纹,可以非接触、无损地获取薄膜的精确厚度信息。这项技术的核心价值在于实现了对关键工艺参数的在线、快速监控,对于提升器件性能与生产良率至关重要。在第三代半导体,尤其是碳化硅功率器件的制造中,外延层厚度直接决定了器件的击穿电压和导通电阻等核心性能。红外干涉光谱法因其对碳化硅材料在红外波段的良好透过性,成为该领域主流的厚度测量方案。通过快速傅里叶变换(FFT)对采集到

weixin_29032489的博客 308

MySQL中的redo log和change buffer的区别

redo log 是为了解决crash safe,宕机后可以进行恢复,记录着对数据的修改操作,主要目的是的随机IO变成顺序IO,提升性能。 change buffer change buffer存在buffer pool中一小块内存,记录着对数据的修改,一般普通索引的数据不在内存的时候,修改操作写入change buffer,change buffer可以进行持久化,最后通过merge操作达到一致性。 不同点 redo log将随机写IO转换成顺序写IO,change buffer只要是

alian 870

MATLAB创建GUI面板实现二维码生成与识别

利用matlab设计gui界面实现二维码的生成与内容识别

infinitystardust的博客 3148

什么是WAL技术?它的优点是什么?MySQL中是否使用到它

什么是WAL技术?它的优点是什么?MySQL中是否使用到它?

qq_30939943的博客 1751

基于Python的FTA协定内容爬虫实战:从数据抓取到智能分析

本文将详细介绍如何使用Python构建一个高效的FTA(自由贸易协定)内容爬虫,涵盖最新技术如Playwright、异步IO、智能解析等。通过本教程,您将学会如何从各类政府网站和国际组织平台抓取结构化FTA数据,并对其进行清洗、存储和分析。文章包含完整的代码实现和最佳实践指南,适合中高级Python开发者学习网络爬虫开发。

2201_76125261的博客 992

Wi-Fi物理帧间隔概念简介

物理帧间隔概念简介。

1042484520@qq.com(邮箱) 1778

MySQL 架构大变革(全景版):从 5.7 到 9.7 的十年进化图谱

9.6 开始,InnoDB 能够检测此类设备,并自动将数据页直接写入数据文件,无需先写 Doublewrite Buffer。9.3 改为分布式调度:将合并任务拆分成小批次,均匀分配到秒级时间窗口内,写 I/O 负载更加平滑,对 SSD 寿命也更友好。9.2 引入了三级热度区分:低热度页优先淘汰,中热度页次之,高热度页尽量保留。MySQL 5.7 虽然整体上仍是“一切以 ibdata1 为中心”,但在其 40 余个版本中,InnoDB 团队进行了多项前瞻性的模块化尝试,为后续彻底重构埋下伏笔。

OeF6Z8C9w的博客 229

Matlab仿真:均匀面阵方向图、均匀线阵方向图、均匀圆阵方向图

其中,阵列方向图是评价阵列性能的重要参数之一。均匀面阵由若干个相同的阵元构成,阵元间等距排列,阵元的方向图形状为一个圆盘。均匀线阵由若干个相同的阵元构成,阵元间等距排列,阵元的方向图形状为一个矩形。本文将采用Matlab进行仿真,分别实现均匀面阵方向图、均匀线阵方向图和均匀圆阵方向图,并对三种阵列进行比较分析。通过以上代码仿真,我们可以对均匀面阵、均匀线阵和均匀圆阵进行方向图的绘制,进一步分析不同阵列在天线性能方面的差异。Matlab仿真:均匀面阵方向图、均匀线阵方向图、均匀圆阵方向图。

2301_79326857的博客 3436

【MySQL】 InnoDB引擎-- Buffer Pool 、Change Buffer 、Log Buffer、Doublewrite Buffer Files、Redo Log等

InnoDB引擎-- Buffer Pool 、Change Buffer 、Log Buffer、Doublewrite Buffer Files、Redo Log等

阿羊ing努力提供更好的Java日记〜 1192

实战避坑:基恩士KV8000 PLC与C#上位机链路通讯全流程实现(含ST代码+上位机源码)

本文详细讲解了基恩士KV8000 PLC与C#上位机的TCP链路通讯实现,从PLC端的ST代码编写、通讯配置,到上位机的通讯类封装、界面实现,再到实战避坑和性能优化,提供了完整的可复用方案。该方案已在实际产线项目中验证,支持实时数据采集和控制指令下发,稳定性和可靠性满足工业场景需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1176

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer

文章目录Buffer Pool概念几个问题redo logBin logUndo logChange Buffer Buffer Pool 概念 上面我们了解了InnoDB存储引擎页的概念,但我们并不知道页在磁盘中是如何存储,在内存中又是如何存储? Buffer Pool是内存中的一块区域,当我们想查询一条数据,首先会在磁盘中找到存放这条数据的某一页。 然后将这一页的数据复制到Buffer Pool中 如果接下来另一个客户端也是查询这条数据的话,那么就会直接在Buffer Pool中获取。 如果是修改语

qq_44027353的博客 1195

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

一文搞懂 MySQL InnoDB架构 Buffer Pool、Change Buffer、自适应哈希索引、Log Buffer

从 Redis 的第一人称视角出发,拟人故事化方式和诙谐幽默的言语与各路“神仙”对话,配合 158 张图,由浅入深循序渐进的讲解 Redis 的数据结构实现原理、开发技巧、运维技术和高阶使用,让人轻松愉快地学习。在磁盘上,Change Buffer 属于系统表空间的一部分,当数据库服务器关闭时,索引变更将在此处缓冲存储。当其他操作将受影响的页读入 Buffer Pool 时,随后将缓存的更改合并,避免了从磁盘读取二级索引页至 Buffer Pool 所需的大量随机访问 I/O。"运维总监瘫坐在监控屏前!

码哥字节 1239

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

change buffer:到底应该选择普通索引还是唯一索引

本文深入探讨了 MySQL 中的普通索引和唯一索引,从查询和更新效率、底层存储原理、以及与 change buffer 和 redo log 的交互等方面详细分析了两者的异同。通过对比 change buffer 和 redo log 的原理与适用场景,本文总结了各自的优势和最佳应用环境,为读者提供了在数据库设计中合理选择索引类型的建议。

tatasix的博客 1153

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

Change Buffer 是 MySQL InnoDB 存储引擎中的一个机制, 用于。而不立即执行这些操作,随后,当 InnoDB 进行合适条件的时候(如页被读取或Flush操作), 会将这些变更写入到二级缓存中。:通过二级索引的变更暂存,可以减少对磁盘的频繁写入,提升插入更新操作的性能。:Change Buffer 可以再后续的操作中批量处理这些变更,减少了随机写入的开销从图中我们可以知道 Buffer Pool 里面有一块内存是留给 change buffer 的。

qq_74916326的博客 1169

MySQL InnoDB存储引擎架构:从Buffer Pool到Redo Log的一致性保障

Buffer Pool的Young/Old分区优雅地解决了缓存污染问题,是全表扫描不会击垮热数据的基石Redo Log的WAL + LSN构成了crash-safe的数学保障——任何已提交的事务都可以从Redo Log中完整恢复通过延迟随机读降低了辅助索引的写入成本填补了"页级原子写入"和"磁盘扇区原子写入"之间的语义鸿沟理解这些组件之间的协作关系,比记忆参数值更重要。

dicky_zhang3的博客 2884

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

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

qq_30939943的博客 1466

MySQL中的change buffer

MySQL的一条语句,大致流程查看内存→读取磁盘数据页→返回数据。 当比如查找一个 a=5的记录的时候,并不是只查找出这一条数据,它所在的整个数据页都会查找出来(每个数据页16KB)。 下次查找a=6的记录的时候,发现该页已经在内存中了,直接返回,不需要磁盘IO。 但是当时增、删、改操作时,并不会每一次操作都进行一次磁盘IO,使用change buffer可以降低磁盘随机IO。 chang...

weixin_38304221的博客 3235

Mysql change buffer

当然,如果 k=5 这个记录刚好是这个数据页的最后一个记录,那么要取下一个记录,必须读取下一个数据页,这个操作会稍微复杂一些。因为引擎是按页读写的,所以说,当找到 k=5 的记录的时候,它所在的数据页就都在内存里了。虽然是只更新内存,但是在事务提交的时候,我们把 change buffer 的操作也记录到 redo log 里了,所以崩溃恢复的时候,change buffer 也能找回来。更新的是唯一索引,没有办法缓存的,普通索引页的是可以记录到 change buffer的。

z1ztai的博客 771

InnoDB的change buffer

什么是change buffer? 当MySQL要更新一个数据页的时候,如果这个数据页正好在内存中,就直接更新,而如果这个数据页不在内存中的话,在不影响数据一致性的前提下,InnoDB会将这些更新缓存到change buffer中,这样就能减少对磁盘的访问。当下次访问这个数据页的时候,将这个数据页加载到内存,然后执行change buffer中的操作。通过这个流程保证逻辑上的正确性。显然将更新操作缓存到change buffer可以减少磁盘IO,由于是缓存执行速度也有极大提升,而且是读入内存是要占用b..

轩1024的博客 380

【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用

mysql中change buffer,buffer pool,redo log,undo log,bin log的作用

Zhangsama1的博客 1363
上一篇: 秒杀系统总结与思考(三) 发现热点
下一篇: MYSQL系列之 redolog 和 binlog
Kindle_code
博客等级 码龄12年 21粉丝 66原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值