Undo Log详解

news2024/10/6 12:32:31

undo log 基本概念

undo log是一种用于撤销回退的日志,在数据库事务开始之前,MySQL会先记录更新前的数据到undo log日志文件里面,当事务回滚时或者数据库崩溃时,可以利用 undo log来进行回退

Undo Log产生和销毁:Undo Log在事务开始前产生;事务在提交时,并不会立刻删除undo log,innodb会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread进
行回收处理

注意: undo log也会产生redo log,因为undo log也要实现持久性保护

undo log的作用

  1. 提供回滚操作【undo log实现事务的原子性

    在数据修改的时候,不仅记录了redo log,还记录了相对应的undo log,如果因为某些原因导致事务执行失败了,可以借助undo log进行回滚

    undo log 和 redo log 记录物理日志不一样,它是逻辑日志。可以认为当delete一条记录时, undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录

  2. 提供多版本控制(MVCC)【undo log实现多版本并发控制(MVCC)

    MVCC,即多版本控制。在MySQL数据库InnoDB存储引擎中,用undo Log来实现多版本并发控制(MVCC)。当读取的某一行被其他事务锁定时,它可以从undo log中分析出该行记录以前的数据版本是怎样的,从而让用户能够读取到当前事务操作之前的数据【快照读】

    快照读: SQL读取的数据是快照版本【可见版本】,也就是历史版本,不用加锁,普通的SELECT就是快照读

    当前读: SQL读取的数据是最新版本(最新版本指的是修改且已经提交的数据)。除了在执行修改语句的时候,需要执行当前读,然后再更新数据之外,select语句也有可能是当前读,比如: select … lock in share mode、select … for update

undo log 的工作原理

在更新数据之前,MySQL会提前生成undo log日志,当事务提交的时候,并不会立即删除undo log,因为后面可能需要进行回滚操作,要执行回滚(rollback)操作时,从缓存中读取数据。undo log日志的删除是通过通过后台purge线程进行回收处理的
在这里插入图片描述

  • 事务A执行update更新操作,在事务没有提交之前,会将旧版本数据备份到对应的undo buffer中,然后再由undo buffer持久化到磁盘中的undo log文件中, 之后才会对user进行更新操作,然后持久化到磁盘
  • 在事务A执行的过程中,事务B对User进行了查询

undo log的存储机制

为了保证事务并发操作时,在写各自的undo log时不产生冲突,InnoDB采用回滚段的方式来维护undo log的并发写入和持久化

rollback segment 称为回滚段 共有128个,每个回滚段中有1024个 undo log segment ,即支持 128*1024 个 undo 操作,最多支持131072个并发事务执行

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

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

相关文章

redis(2)

缓存:缓存是一个高速数据交换的存储器,使用它可以迅速的访问和操作数据 因为单体应用已经不适用于现在的环境了,所以最终变成分布式系统,本地缓存已经不适用了 1)比如说张三用户访问了应用程序nginx把请求分配给A服务器 A机器查询数据库,并且把数据库的结…

模型实战(11)之win10下Opencv+CUDA部署yolov5、yolov8算法

win10下Opencv+CUDA部署yolov5、yolov8算法 测试环境:AMDRH7000+RTX3050+win10+vs2-10+opencv455+cuda11.7关于opencv470+contrib+cuda的编译,可以详见:Win10下Opencv+CUDA联合编译详细教程本文代码同时支持yolov5、yolov8两个模型,详细过程将在文中给出,完整代码仓库最后…

自动化测试真的能提效吗?怎么才能真正掌握自动化测试技巧呢?

近年来,随着软件开发速度的提高,自动化测试已经成为了一个必要的环节。但是,对于自动化测试,有些人认为它能够大幅提升效率,而有些人则认为自动化测试无法替代手工测试,并且实施自动化测试需要投入大量的时…

vue3 - 超详细头像裁剪并上传到服务器,支持按照自定义比例裁切图片效果组件插件(详细示例源码教程,一键复制运行开箱即用)

效果图 大部分都贼难用,而且全是bug。。并且很少有 vue3的,全是 vue2。。 本博客实现了在 vue3.js 项目中,实现图像上传后并按一定的比例进行裁剪的示例功能源码,支持各种参数、样式修改, 示例有 Element Plus + Vue3.js 版本,也有纯 Vue3.js 版本(无 UI 框架搭配),按…

【机器学习】西瓜书课后习题参考答案—第一章

记录西瓜书课后习题的思考与参考答案。 1.1 表1.1中若只包含编号为1和4的两个样例,试给出相应的版本空间。 答: 版本空间:与训练集一致的“假设集合”,称之为“版本空间”(version space) 只包含编号为1和…

Vue-cli搭建项目(包含Node.js安装和ElementUI安装)

目录 一、vue-cli 二、Node.js npm: Node.js安装: 测试: 三、Vue-cli搭建项目 使用HBuildex 创建一个vue.js项目 创建的自己的组件: 组件路由: 四、ElementUI安装 1.ElementUI下载: 2.在main.js中…

Echarts图表X轴文本过长导致展示不全

今天就遇到如题目所说问题。遇到问题当然取看官方文档喽,链接奉上ECharts-axis 博主使用的ECharts版本号为5.4.5 这个问题效果图如下: 可以看到x轴文本太长,导致部分x轴标签无法正常显示,在这里提供两种解决办法,并告诉…

OSI七层网络模型+TCP/IP四层模型

OSI七层模型: 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就…

6、Flutterr聊天界面网络请求

一、准备网络数据 1.1 数据准备工作 来到网络数据制造的网址,注册登录后,新建仓库,名为WeChat_flutter;点击进入该仓库,删掉左侧的示例接口,新建接口. 3. 接着点击右上角‘编辑’按钮,新建响应内容,类型为Array,一次生成50条 4. 点击chat_list左侧添加按钮,新建chat_list中的…

华为OD机试2023年最新题库(JAVA)

目录 华为OD机试是什么?华为OD面试流程?华为OD机试通过率高吗?华为OD薪资待遇?华为OD晋升空间?华为OD刷题列表,一天三题,刷出算法新高度,刷出人生新际遇。 大家好,我是哪…

什么是http代理504网关超时错误,要如何修复?

当你在使用 HTTP 代理时,有时候会遇到"504 网关超时"错误,这个错误看起来非常可怕,但实际上它并不是一个很难解决的问题。在本文中,我将向你介绍 504 错误的定义,以及为什么我们会遇到这个错误,同…

babysql

打开界面是一个登录框,所以直接使用的万能公式,但是没用出发了报错 结合提示来看,题目应该是过滤掉了or 尝试大小写绕过,失败了 尝试双写绕过,成功绕过限制 接下来就判断字段数,发现by也被过滤掉了 登是登上…

CAM350 PCB开短路检查指导

CAM350 PCB开短路检查指导 Layout完成后,通过DRC和华秋DFM检查没有问题后,使用CAM350进行开短路的检查,没有问题后可转交制版厂。 ①首先通过AD生成IPC文件,下图为生成步骤: File→Assembly Outputs→Test Point Repo…

新形势下,如何进行智慧园区移动应用建设?

智能化工园区通过信息化实现工业管理的数字化和网络化,实现对生产过程的全面监控和实时数据采集。这使企业能够更好地管理,及时发现问题并采取相应的措施来降低成本。此外,智慧化管理提高了企业资源的使用效率,避免浪费和重复利用…

异常___

规则:玩家是异常机器人,要突破正常机器人(防火墙)的扫描封锁攻击,到达目的地。 (1) 教学内容:指令的形式和运行方法。 简单的说就是脚本语言,指令的形式是给出固定顺序…

行为型模式-中介者模式

中介者模式 概述 一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中&#xf…

协方差矩阵

目录 1.方差和协方差的定义 2.协方差矩阵 3. 协方差矩阵的应用 3.1 对两个类内协方差矩阵进行对角化 3.2 机器学习中的协方差矩阵应用小结 4. 协方差矩阵中心对齐 1.方差和协方差的定义 2.协方差矩阵 3. 协方差矩阵的应用 3.1 对两个类内协方差矩阵进行对角化 对两个…

【Linux】动态链接和静态链接

函数库一般分为静态库和动态库两种 动态库:使编译器对用户的程序进行动态链接 动态链接:拷贝的是动态库中当前程序所需代码的地址到可执行程序中的相关位置,可在执行时链接到动态库中的相关,即动态链接的可执行程序再运行时仍然依…

了解设计模式

https://github.com/WittyKyrie/UnityUtil/blob/main/%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7/Object 代码仓库↑ 【游戏开发设计模式】单例模式,要提防的设计模式!!_哔哩哔哩_bilibili 参考↑ 组合模式: 继承会造成代码复用量…

Django框架的源码解析

简述从django-admin startproject [name]开始 小结 django.core.management init.py 1. 5个方法2. ManagementUtility 类 小结 base.py 1. 2个方法:2. CommandError(Exception):3. SystemCheckError(CommandError):4. CommandParser(ArgumentParser):5. DjangoHelpF…