[MySQL]事务原理之redo log,undo log

🌈键盘敲烂,年薪30万🌈

目录

一、log日志文件

📕 事务执行流程

📕 redo log

📕 undo log

二、总结


  • 👀再来一遍ACID

1. 原子性:原子性确保事务作为一个整体执行,要么全部执行成功,要么全部不执行。

2. 一致性:一致性确保事务将数据库从一个状态转换为另一个状态。

3. 隔离性:隔离性确保并发执行的多个事务互相隔离。

4. 持久性:事务一旦提交,其修改将永远保存在数据库中。

一、log日志文件

📕 事务执行流程
  • 为什么会有日志❓

先说结论:

    数据库日志的存在是为了确保事务的持久性,支持故障恢复和并发控制,并提供回滚、撤销以及备份和恢复的功能。日志记录了对数据库的操作,使得数据库系统能够有效地管理数据的修改和恢复。

  • 确保持久性❓ 难道没有日志事务提交后可能出现数据不一致❓

分析:

    执行事务->判断内存中有无数据->(加载磁盘数据到内存)->事务提交->日志保存到磁盘

问题1:刷新数据时机?

    系统会根据负载情况和性能优化的考虑来决定脏数据刷新的时机和方式。

问题2:为什么不能提交完事务,直接将Buffer Pool数据保存到磁盘文件?

    我们平时操作的数据库都是随机的,也就意味着随机访问磁盘文件,这会大量占用I/O,性能很低。但是,日志是以追加的方式写入,是顺序访问磁盘文件,性能高的很。

WAL机制:

Writer - Ahead - Logging: 先记录日志在刷新脏数据

小结:

了解了事务的执行流程在看日志就比较简单了,无非就是两种记录方式。

📕 redo log
  • 重做日志,记录事务提交时对数据页的操作,从而实现事务的持久性。

redo log buffer:内存中的数据库数据。

redo log file:磁盘中的数据库数据。


📕 undo log

又称回滚日志,用于记录被修改前的信息,作用有两个,回滚事务,MVCC。它可以保障事务的原子性

注意:

Undo log记录的数据是反向的,比如执行一条delete语句,undo log保存一条insert语句,回滚就是读取undo log中的sql语句,再比如执行update语句,undo log会保存update前的数据库状态。

Undo log销毁:事务提交后不会立刻销毁日志,因为这些日志可能用于MVCC

Undo log存储:采用段的方式进行管理和记录(这里不太懂)

二、总结

redo log保证了事物的持久性

undo log保证了事务的原子性

redo log + undo log保证了事务的一致性

MVCC+锁保证了事务的隔离性(下一篇)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

D4140交流插座电器漏电断路器的低功耗控制芯片,内置桥式整流器漏电灵敏度可调,采用SOP8和DIP8 的封装形式

D4140 是一种用于交流插座电器漏电断路器的低功耗控制器。这些设备可以检测到接地的危险电流路径,例如设备掉进水中。在发生有害或致命的电击之前,断路器会断开线路。内置有整流桥,齐纳管稳压器,运算放大器,电流基准&a…

【数学建模美赛M奖速成系列】报名流程与论文的基本格式

数学建模美赛M奖速成系列 写在前面报名方式1.官网直接报名2.赛氪软件辅助报名 论文的基本格式摘要模型建立模型求解结果分析与检验模型评价 竞赛的基本注意事项1. 选题后查找资料2. 写作能力和编程能力 历年优秀论文标题与摘要简明扼要善用图表 最后 写在前面 最近&#xff0c…

【Docker】学习笔记(一)三剑客之 docker engine仓库、镜像与容器的基本操作

docker engine安装 ubuntu20.04安装docker教程 docker核心架构 镜像(image) 一个镜像就代表一个软件服务(ubuntu镜像、mysql镜像、redis镜像、mq镜像)只读 远程中心仓库(repository) 中心仓库用来集中存储…

5.1CPU的功能和结构

CPU的功能 1.指令控制。 完成取指令、分析指令和执行指令的操作,即程序的顺序控制。 ⒉操作控制。 一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制…

微信小程序:上传图片到别的域名文件下

效果 wxml <!-- 上传照片 --> <view class"addbtn"><view classpic name"fault_photo" wx:for"{{imgs}}" wx:for-item"item" wx:key"*this"><image classweui-uploader_img src"{{item}}"…

程序员必须知晓的11个C++要点-供大家学习研究参考

要点汇集C书中或网站上无法找到的&#xff0c;如&#xff1a;指向成员的指针&#xff0c;这是许多资料中都不愿提到的地方&#xff0c;也是经常出错的地方。希望对大家学习研究有帮助。 要点1: <iostream.h> 还是 <iostream>? 要点2&#xff1a;用引用传递参数时…

若依 ruoyi-vue3+ts-plus+ 宇道 yudao-ruoyi-vue-pro前端显示部门名称

想在 index.vue 上显示列表里对应的部门名称 效果 引入dept import * as DeptApi from "/api/system/dept"; 初始化时 /** 初始化 **/ onMounted(async () > {getList();deptNameList.value await DeptApi.getSimpleDeptList(); }) 加载id 对应的部门名称 …

网络推理之深度学习推理框架

如何选择深度学习推理框架&#xff1f; PyTorch vs LibTorch&#xff1a;网络推理速度谁更快&#xff1f; 高质量C进阶[2]&#xff1a;如何让线性代数加速1000倍&#xff1f; TensorRT: ONNX:

AI日报:人工智能与新材料的发现

文章目录 总览人工智能正在革命性地发现新的或更强的材料&#xff0c;这将改变制造业。更坚韧的合金问题研究解决方案 新材料人工智能存在的挑战方法探索 日本的研究人员正在使用人工智能制造更强的金属合金或发现新材料&#xff0c;并彻底改变制造过程 总览 日本的研究人员开…

【C】⽂件操作

1. 为什么使⽤⽂件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久化…

鸿蒙原生应用/元服务开发-Stage模型能力接口(二)

ohos.app.ability.AbilityConstant (AbilityConstant)一、说明 AbilityConstant提供Ability相关的枚举&#xff0c;包括设置初次启动原因、上次退出原因、迁移结果、窗口类型等。本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口…

【Java 基础】32 定时调度

文章目录 Timer 类创建 Timer注意事项 ScheduledExecutorService 接口创建 ScheduledExecutorService注意事项 选择合适的定时调度方式Timer 的适用场景ScheduledExecutorService 的适用场景 总结 在软件开发中&#xff0c;定时任务是一种常见的需求&#xff0c;用于周期性地执…

替代升级虚拟化 | ZStack Cloud云平台助力康恩贝核心业务上云

数字经济正加速推动各行各业的高质量升级发展&#xff0c;云计算是数字经济的核心底层基础设施。作为云基础软件企业&#xff0c;云轴科技ZStack 坚持自主创新&#xff0c;自研架构&#xff0c;产品矩阵可全面覆盖数据中心云基础设施&#xff0c;针对虚拟化资源实现纳管、替代和…

大数据技术之Shell(超级详细)

大数据技术之Shell&#xff08;超级详细&#xff09; 第1章 Shell概述 Shell 是一种脚本语言&#xff0c;用于在操作系统的命令行界面&#xff08;CLI&#xff09;下执行命令和脚本。在大数据领域&#xff0c;Shell 脚本常用于编写数据处理和分析任务的自动化脚本&#xff0c…

java swing 药品销售系统 mysql

数据库 查询药品&#xff1a; 出售药品&#xff1a; 查询客户信息&#xff1a; 查询订单信息&#xff1a;

Next.js ts redux/toolkit状态管理

目录 介绍 安装依赖 初始化store 1、在src下创建store文件夹&#xff0c; 2、创建最简单的slice切片 3、创建入口文件index.ts 4、创建hooks.ts 在_app.tsx中注入store tsx中使用store payload createAsyncThunk 效果 介绍 reduxjs/toolkit是Redux 官方提供的一个…

Axure元件基本介绍进阶

Axure元件基本介绍进阶 1.Axure元件基本介绍1.在 Axure 中&#xff0c;元件是构建原型的基本构成单元&#xff0c;能够帮助设计师快速创建、重复使用和管理设计元素。以下是 Axure 中元件的基本介绍&#xff1a;1.基本元件&#xff1a; 2.基本元件的使用一.【举例说明】积木&am…

Python提取速率

Python提取速率 需求&#xff1a;提取速率需要有M提取到M前数值并添加回原始数据如果是0只能为空白 Python实现 import pandas as pd import os# 提取速率函数 def extract_broadband_speed(speed):if pd.notnull(speed) and M in str(speed):return str(speed).split(M)[0] …

(第8天)保姆级 PL/SQL Developer 安装与配置

PL/SQL Developer 安装与配置(第8天) 咱们前面分享了很多 Oracle 数据库的安装,但是还没有正式使用过 Oracle 数据库,怎么连接 Oracle 数据库?今天就来讲讲我学习中比较常用的 Oracle 数据库连接工具:PL/SQL DEVELOPER。 PL/SQL Developer 的安装和配置对于新手来说还是…

lwIP 细节之四:recv 回调函数是何时调用的

使用 lwIP 协议栈进行 TCP 裸机编程&#xff0c;其本质就是编写协议栈指定的各种回调函数。将你的应用逻辑封装成函数&#xff0c;注册到协议栈&#xff0c;在适当的时候&#xff0c;由协议栈自动调用&#xff0c;所以称为回调。 注&#xff1a;除非特别说明&#xff0c;以下内…