(二十九)大白话MySQL直接强行把redo log写入磁盘?

news2025/7/28 5:23:45

上一讲我们给大家说了一下redo log block这个概念,大家现在都知道平时我们执行完增删改之后,要写入磁盘的redo log,其实应该是先进入到redo log block这个数据结构里去的,然后再进入到磁盘文件里,如下图所示。

image-20230102105721001

那么今天我们就来讲讲,这个redo log到底是如何通过内存缓冲之后,再进入磁盘文件里去的,这就涉及到了一个新的组件,redo log buffer,他就是MySQL专门设计了用来缓冲redo log写入的。

这个redo log buffer其实就是MySQL在启动的时候,就跟操作系统申请的一块连续内存空间,大概可以认为相当于是buffer pool吧。那个buffer pool是申请之后划分了N多个空的缓存页和一些链表结构,让你把磁盘上的数据页加载到内存里来的。

redo log buffer也是类似的,他是申请出来的一片连续内存,然后里面划分出了N多个空的redo log block,如下图所示。

image-20230102110511270

通过设置mysql的innodb_log_buffer_size可以指定这个redo log buffer的大小,默认的值就是16MB,其实已经够大了,毕竟一个redo log block才512字节而已,每一条redo log其实也就几个字节到几十个字节罢了。

所以大家看到这里就明白了,上一讲我们就说了,其实redo log都是先写入内存里的redo log block数据结构里去的,然后完事儿了才会把redo log block写入到磁盘文件里去的

这里我们看到了redo log buffer的结构,就很清晰的知道,当你要写一条redo log的时候,就会先从第一个redo log block开始写入,如下图。

image-20230102110524960

写满了一个redo log block,就会继续写下一个redo log block,以此类推,直到所有的redo log block都写满。

那么此时肯定有人会问了,万一要是redo log buffer里所有的redo log block都写满了呢?

那此时必然会强制把redo log block刷入到磁盘中去的!

我们上一次讲到了redo log block刷入磁盘文件中的示意,其实就是把512字节的redo log block追加到redo log日志文件里去就可以了

看下面的图,里面就画的很清楚,在磁盘文件里不停的追加一个又一个的redo block。

image-20230102110550148

另外还要给大家讲一点的是,其实在我们平时执行一个事务的过程中,每个事务会有多个增删改操作,那么就会有多个redo log,这多个redo log就是一组redo log,叫做redo log group。其实每次一组redo log都是先在别的地方暂存,然后都执行完了,再把一组redo log给写入到redo log buffer的block里去的。

如果一组redo log实在是太多了,那么就可能会存放在两个redo log block中,比如group1存放在两个block中,我们看下图示意。

image-20230102111019739

但是反之,如果说一个redo log group比较小,那么也可能多个redo log group是在一个redo log block里的,如下图所示。

image-20230102110603606

想必今天的内容学习完,大家对于平时我们一个一个的事务里产生的多条redo log ,是如何形成一个redo log组的,一组redo log是如何写入redo log buffer中的redo log block的,然后redo block是如何写入redo log磁盘文件的,这个全流程就有了一个清晰地理解和认识了!

下周我们要继续探索的,就是这个redo log buffer里的redo log block们到底是如何写入到磁盘文件里去的?

一定要等待redo log block全部写满了才会刷入磁盘吗?还有哪些其他的时机会把redo log block刷入磁盘吗?

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

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

相关文章

三、锁相关知识

文章目录锁的分类可重入锁、不可重入锁乐观锁、悲观锁公平锁、非公平锁互斥锁、共享锁深入synchronized类锁、对象锁synchronized的优化synchronized实现原理synchronized的锁升级重量锁底层ObjectMonitor深入ReentrantLockReentrantLock和synchronized的区别AQS概述加锁流程源…

Flink中遇到的问题

目录 1、提交flink 批处理任务时遇到的问题 2、flink定时任务,mysql连接超时问题 3、yarn 增加并行任务数量配置 4、flink checkpoint 恢复失败 5、flink程序在hadoop集群跑了一段时间莫名挂掉 1、提交flink 批处理任务时遇到的问题 问题描述: …

超详细树状数组讲解(+例题:动态求连续区间和)

树状数组的作用:快速的对数列的一段范围求和快速的修改数列的某一个数为什么要使用树状数组:大家从作用中看到快速求和的时候可能会想到为什么不使用前缀和只需要预处理一下就可以在O(1)的时间复杂度下实行对于数列的一段范围的和但是我们可以得到当我们…

记一次服务器入侵事件的应急响应

0x01 事件背景 8月某日,客户官网被黑,需在特定时间内完成整改。为避免客户业务受到影响,实验室相关人员第一时间展开本次攻击事件的应急处理。 0x02 事件分析 网站源码被篡改,攻击者一定获取到了权限,那么接下来的思…

Linux进程1 - 进程的相关概念

目录 1.进程的概念 2.并行和并发 3.PCB(进程控制块) 4.进程状态 1.进程的概念 程序:二进制文件,占用的磁盘空间进程:启动的程序所有的数据都在内存中需要占用更多的系统资源cpu,物理内存 2.并行和并发 并发----在…

Spring事物和事务的传播机制

事务的定义:将一组操作封装到一个执行单元,要么全部成功,要么全部失败。 一、Spring中事务的实现 Spring中事务的操作分为两类: 1.编程式事务(手动写代码操作事务) 2.声明式事务(利用注解自动…

2023财年Q4业绩继续下滑,ChatGPT能驱动英伟达重回巅峰吗?

近年来,全球科创风口不断变换,虚拟货币、元宇宙等轮番登场,不少企业匆忙上台又很快谢幕,但在此期间,有些企业扮演淘金潮中“卖水人”的角色,却也能够见证历史且屹立不倒。不过,这并不意味着其可…

CSS 美化网页元素【快速掌握知识点】

目录 一、为什么使用CSS 二、字体样式 三、文本样式 color属性 四、排版文本段落 五、文本修饰和垂直对齐 1、文本装饰 2、垂直对齐方式 六、文本阴影 七、超链接伪类 1、语法 2、示例 3、访问时,蓝色;访问后,紫色; …

详解八大排序算法

文章目录前言排序算法插入排序直接插入排序:希尔排序(缩小增量排序)选择排序直接选择排序堆排序交换排序冒泡排序快速排序hoare版本挖坑法前后指针版本快速排序的非递归快速排序总结归并排序归并排序的非递归实现:计数排序排序算法复杂度及稳定性分析总结前言 本篇…

复杂场景的接口测试

测试场景一:被测业务操作是由多个API调用协作完成 背景:一个单一的前端操作可能会触发后端一系列的API调用,此时API的测试用例就不再是简单的单个API调用,而是一系列API的调用 存在的情况:存在后一个API需要使用前一个…

一文带你彻底搞懂Nginx反向代理

一文带你彻底搞懂Nginx反向代理一、什么是反向代理1.1 正向代理1.2 反向代理1.3 总结二、配置反向代理2.1 准备 Tomcat2.2 配置 Nginx一、什么是反向代理 1.1 正向代理 举一个通俗的例子,因为众所周知的原因,我们无法访问谷歌,但是因为某些…

Android:实现签名功能——signature-pad库

文章目录实现效果步骤1、添加 signature-pad 库的依赖。2、在 layout 文件中使用 SignaturePad 控件,另外添加“清空”和“保存”两个按钮。3、实现清空 SignaturePad 控件内容的功能4、实现保存 SignaturePad 控件内容的功能5、实现兼容Android10以下和Android10以…

同城创业有哪些优势可利用?本地外卖平台的行业优势可以利用

伴随着外卖市场的下沉,低线城市的用户开始大量使用外卖跑腿平台! 由于中国在线外卖行业逐渐成熟,一二线主流市场逐渐饱和,外卖行业逐渐向低线城市发展。2023年,三线及以下城市使用外卖平台的频率几乎等于一二线城市&a…

FreeRTOS入门(03):队列、信号量、互斥量

文章目录目的队列(queue)信号量(semaphore)互斥量(mutex)互斥量递归互斥量总结目的 FreeRTOS提供给用户最核心的功能是任务(Task),实际项目中通常会有多个任务&#xff…

【GO】K8s 管理系统项目9[API部分--Secret]

K8s 管理系统项目[API部分–Secret] 1. 接口实现 service/dataselector.go // secret type secretCell corev1.Secretfunc (s secretCell) GetCreation() time.Time {return s.CreationTimestamp.Time }func (s secretCell) GetName() string {return s.Name }2. Secret功能…

浅谈BOM

什么是BOM BOM对于每个前端都不陌生,但是很多人都停留在表面,而没有深层次的研究过它。JavaScript有一个非常重要的运行环境就是浏览器,而且浏览器本身又作为一个应用程序需要对其本身进行操作,所以通常浏览器会有对应的对象模型…

tidb ptca,ptcp考证

PingCAP 认证 TiDB 数据库专员 V6 考试(2023-02-23)https://learn.pingcap.com/learner/exam-market/list?categoryPCTA PingCAP 认证 TiDB 数据库管理专家(PCTP - DBA)认证考试范围指引 - ☄️ 学习与认证 - TiDB 的问答社区:lo…

Linux部署的Java应用生成图片和二维码会出现中文乱码的解决办法

Linux部署的Java应用生成图片和二维码会出现中文乱码,这是因为没有中文字体的原因,需要安装字体库。下载字体库https://download.csdn.net/download/a506602491/87490755,将文件解压至 /usr/share/fonts 目录下,如果没有fonts文件…

TRichView改进对HTML的支持并增强报告功能

TRichView改进对HTML的支持并增强报告功能 TRichView v21.0新功能: HTML导入和导出改进。 加载和保存的新方法。 改进图像选择和插入。 RichView Actions v11.0新功能: 包括加载和保存HTML的新方法。 使用新的TRVAControlPanel.OnChoosePicture事件选择…

[数据结构]链表OJ

目录 数据结构之链表OJ:: 1.移除链表元素 2.反转链表 3.链表的中间结点 4.链表中倒数第k个结点 5.合并两个有序链表 6.链表分割 7.链表的回文结构 8.相交链表 9.环形链表 10.环形链表II 11.复制带随机指针的链表 数据结构之链表OJ:&#xff…