Mysql学习之事务日志redolog深入剖析

Mysql 事务日志 redo log

事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现的呢?
事务的隔离性由锁机制实现。而事务的原子性、一致性和持久性由事务的redo日志和undo日志来保证
REDO LOG 称为重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。
UNDO LOG 称为回滚日志,回滚行记录到某个特定的版本,用来保证事务的原子性、一致性。

REDO和UNDO都可以视为一种恢复操作,但是:
redo log:是存储引擎层生成的日志,记录的是物理级别上的页修改操作,比如页号xxx,偏移量yyy。主要是为了保证数据的可靠性。
undo log:是存储引擎层生成的日志,记录的是逻辑操作的日志。比如对某一行数据进行了INSERT的操作,那么undo log就记录一条与之相反的DELETE操作。主要用于事务的回滚(undo log记录的是每个修改操作的逆操作)和一致性非锁定读(undo log 回滚记录到某种特定的版本…MVCC 即多版本并发控制)
redo 日志
InnoDB存储引擎是以页为单位来管理存储空间的,再真正访问页面之前,需要把磁盘上的页缓存到内存中的Buffer Pool之后才可以正常访问呢。所有的变更都必须先更新缓冲池中的数据,然后缓冲池中的脏页会以一定的频率被刷入磁盘(checkpoint机制),通过缓冲池来优化CPU和磁盘之间的鸿沟,这样可以保证整体的性能不会下降的太快。
为什么需要redo 日志
在这里插入图片描述
另外一个解决的思路: 在这里插入图片描述
InnoDB引擎的事务采用了WAL技术(Write-Ahead Logging)。这种技术的思想就是先写日志,再写磁盘,只有日志写入成功,才算事务提交成功。这里的日志就是redo log.当发生宕机且数据未刷到磁盘的时候,可以通过redo log来恢复,保证ACID中的D,这就是redo log的作用。
在这里插入图片描述
REDO 日志的好处、特点
好处
redo 日志降低了刷盘频率
redo 日志占用的空间非常小
特点
redo 日志是顺序写入磁盘的
事务执行过程中,redo log不断的记录
在这里插入图片描述
redo的组成(内存层面与磁盘层面)
在这里插入图片描述
参数设置:innodb_log_buffer_size
默认大小为16M

SHOW VARIABLES LIKE 'innodb_log_buffer_size'

在这里插入图片描述
重做日志文件(redo log file) 保存在磁盘中,是持久的
在这里插入图片描述
在这里插入图片描述
redo的整体流程
以一个更新事务为例:
在这里插入图片描述
体会:Write-Ahead Log(预先日志持久化),在持久化一个数据页之前,先将内存中相应的日志页持久化。

redo log的刷盘策略
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
也就是说,一个没有提交事务的redo log记录,也可能会刷盘。因为事务执行过程redo log 记录是会写入 redo log buffer 中,这些redo log 记录会被后台线程刷盘
在这里插入图片描述
在这里插入图片描述
不同刷盘策略的演示(流程图)
默认情况
在这里插入图片描述
默认情况小结:
在这里插入图片描述
值为2的情形
在这里插入图片描述
值为2的小结:
在这里插入图片描述
值为0的情形
在这里插入图片描述
值为0的小结:
在这里插入图片描述
三种刷盘策略:
效率0>1>2,一致性1>2>0

写入redo log buffer 过程

在这里插入图片描述
redo日志写入log buffer
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
redo log block的结构图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
redo log file
位置

SHOW VARIABLES LIKE 'innodb_log_group_home_dir'

在这里插入图片描述
日志文件组
在这里插入图片描述
checkpoint
在这里插入图片描述
在这里插入图片描述
relog小结
在这里插入图片描述
深入学习可参考B站链接
B站链接–MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板

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

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

相关文章

OpenGL ES (OpenGL) Compute Shader 计算着色器是怎么用的?

OpenGL ES (OpenGL) Compute Shader 是怎么用的? Compute Shader 是 OpenGL ES(以及 OpenGL )中的一种 Shader 程序类型,用于在GPU上执行通用计算任务。与传统的顶点着色器和片段着色器不同,Compute Shader 被设计用于在 GPU 上执行各种通用计算任务,而不是仅仅处理图形…

挑战杯 基于情感分析的网络舆情热点分析系统

文章目录 0 前言1 课题背景2 数据处理3 文本情感分析3.1 情感分析-词库搭建3.2 文本情感分析实现3.3 建立情感倾向性分析模型 4 数据可视化工具4.1 django框架介绍4.2 ECharts 5 Django使用echarts进行可视化展示5.1 修改setting.py连接mysql数据库5.2 导入数据5.3 使用echarts…

供应链大数据:穿越经济迷雾的指南针

随着经济形势的变幻莫测,企业运营面临着前所未有的挑战。在这个充满不确定性的时代,供应链大数据如同一盏明亮的指南针,为企业提供精准的方向指引。下面,我们将深入探讨供应链大数据如何帮助企业洞察市场趋势、优化库存管理、降低…

2.deeplabv3+的主干网络(mobilenet网络)

deeplabv3的论文中用了resnet网络,在这里用轻量级网络mobilenet替换resnet,下面分别是两个网络的代码。 1.mobilenet网络 代码如下: import math import os import cv2 import numpy as np import torch import torch.nn as nn import tor…

基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统

wx供重浩:创享日记 对话框发送:225头盔 获取完整源码源文件已标注的数据集(1463张)源码各文件说明配置跑通说明文档 若需要一对一远程操作在你电脑跑通,有偿89yuan 效果展示 基于YOLOv8深度学习PyQT5的电动车头盔佩戴检…

网络防御-内容安全

目录 内容安全IAE引擎DFI和DPI技术 --- 深度检测技术DPI --- 深度包检测技术DFI --- 深度流检测技术 入侵防御(IPS)入侵检测的方法异常检测误用检测 签名ID --- 签名的标识检测范围 内容安全 攻击可能只是一个点,防御需要全方面进行 IAE引擎 …

2 easy 27. 移除元素

双指针法 复杂度: //给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 // // 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 // // 元素的顺…

【大数据】Flink SQL 语法篇(四):Group 聚合

Flink SQL 语法篇(四):Group 聚合 1.基础概念2.窗口聚合和 Group 聚合3.SQL 语义4.Group 聚合支持 Grouping sets、Rollup、Cube 1.基础概念 Group 聚合定义(支持 Batch / Streaming 任务):Flink 也支持 G…

RCE (Remote ????? execution) --->CTF

看这个标题就知道今天的内容不简单!!!! 那么就来讲一下我们的RCE吧 目录 ​编辑 1. &? |? ||? &&? 2.PHP命令执行函数&& ||"" 1."" &…

6、进程、服务管理

一、进程管理 1.概述 进程是正在执行的程序或命令,每一个进程都独立运行,都有自己的地址空间,并占用一定的系统资源以后开发会遇见: 端口占用出现程序假死、卡死 2.查看系统运行进程 语法 ps 参数ps –a:显示当前终端下的所有…

智能SQL生成:后端技术与LLM的完美结合

文章目录 引言一、什么是大模型二、为什么选择LLM三、开发技术说明四、系统架构说明五、编码实战1. Maven2. 讯飞大模型配置类3. LLM相关的封装4. 编写LLM的service5. 编写controller6. 运行测试 六、总结 引言 本篇文章主要是关于实现一个类似Chat2DB的根据自然语言生成SQL的…

开源工具和框架

目录 开源工具和框架 一、 开源工具和框架 二、开源工具和框架在现代软件开发中的角色 1、基础设施建设: 2、开发效率提升: 3、代码质量保障: 4、技术创新: 三、广泛使用的开源项目分析 3.1、Linux 3.2、Git 3.3、Docke…

【Java程序设计】【C00313】基于Springboot的物业管理系统(有论文)

基于Springboot的物业管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的物业管理系统,本系统有管理员、物业、业主以及维修员四种角色权限; 管理员进入主页面,主要功能包…

mybatis总结传参三

十、(不推荐)多个参数-按位置传参 参数位置从 0 开始, 引用参数语法 #{ arg 位置 } , 第一个参数是 #{arg0}, 第二个是 #{arg1} 注意: mybatis-3.3 版本和之前的版本使用 #{0},#{1} 方式, 从 myba…

stream流-> 判定 + 过滤 + 收集

List<HotArticleVo> hotArticleVos hotArticleVoList .stream() .filter(x -> x.getChannelId().equals(wmChannel.getId())).collect(Collectors.toList()); 使用Java 8中的Stream API对一个名为hotArticleVoList的列表进行过滤操作&#xff0c;筛选出符合指定条件…

SQL进阶(三):Join 小技巧:提升数据的处理速度

复杂数据结构处理&#xff1a;Join 小技巧&#xff1a;提升数据的处理速度 本文是在原本sql闯关的基础上总结得来&#xff0c;加入了自己的理解以及疑问解答&#xff08;by GPT4&#xff09; 原活动链接 用到的数据&#xff1a;链接 提取码&#xff1a;l03e 目录 1. 课前小问…

stable-diffusion-webui+sadTalker开启GFPGAN as Face enhancer

接上一篇&#xff1a;在autodl搭建stable-diffusion-webuisadTalker-CSDN博客 要开启sadTalker gfpgan as face enhancer&#xff0c; 需要将 1. stable-diffusion-webui/extensions/SadTalker/gfpgan/weights 目录下的文件拷贝到 :~/autodl-tmp/models/GFPGAN/目录下 2.将G…

Spring Boot Profiles简单介绍

Spring Boot application.properties和application.yml文件的配置 阅读本文之前&#xff0c;请先阅读上面的配置文件介绍。 Spring Boot Profiles是一个用于区分不同环境下配置的强大功能。以下是如何在Spring Boot应用程序中使用Profiles的详细步骤和代码示例。 1. 创…

【openGL教程08】基于C++的着色器(02)

LearnOpenGL - Shaders 一、说明 着色器是openGL渲染的重要内容&#xff0c;客户如果想自我实现渲染灵活性&#xff0c;可以用着色器进行编程&#xff0c;这种程序小脚本被传送到GPU的显卡内部&#xff0c;起到动态灵活的着色作用。 二、着色器简述 正如“Hello Triangle”一章…

鸿蒙开发-UI-图形-绘制几何图形

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 鸿蒙开发-UI-页面路由 鸿蒙开发-UI-组件导航-Navigation 鸿蒙开发-UI-组件导航-Tabs 鸿蒙开发-UI-图形-图片 文章目录 前言 一、绘制组件 二、形状视口 三、自定义样式 四、使用场景 总结 前…