事务日志undo log

news/2024/11/15 6:54:20/

事务日志undo log

image-20221227154243747

1 Undo日志的作用

作用1:回滚数据

逻辑上恢复,之前插入了一条数据,已经开辟了物理空间,回滚只是将该数据删除,物理空间还存在。

作用2:MVCC

image-20221227154603202

2 Undo存储结构

image-20221227155108744

mysql> show variables like 'innodb_undo_logs';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_undo_logs | 128 |
+------------------+-------+

3 Undo log 生命周期

image-20221227155943636

1 简要生成过程

image-20221227160244925

update age = 12 where id = 1; 原来age为10;

执行过程

  1. 执行更新操作时,先从buffer pool 中查找有没有对应的数据页,没有就从磁盘加载进 缓冲池。
  2. 记录undo log日志 age = 10
  3. 在内存中更新数据age=12
  4. 记录redo log日志到 redo buffer 中
  5. 由三种策略决定什么时候刷盘到 磁盘上
  6. 记录bin log 文件

2 详细过程

image-20221227161718608

image-20221227161922684

image-20221227163231392

执行update语句,分为两种情况

情况1 不更新主键

update user set name = 'Sun' where id =1

更改行记录中 tom 值为 sun

回滚指针指向 此次 undo log ,头插法。

image-20221227163257219

情况2 更新主键值

UPDATE user SET id=2 WHERE id=1;

将原来的标识为删除,在后面插入一条新的记录。同时记录下更新前id。

回滚指针ID是递增的

3 回滚过程

以上面的例子来说,假设执行rollback,那么对应的流程应该是这样:

  1. 通过undo no=3的日志把id=2的数据删除
  2. 通过undo no=2的日志把id=1的数据的deletemark还原成0
  3. 通过undo no=1的日志把id=1的数据的name还原成Tom
  4. 通过undo no=0的日志把id=1的数据删除

4 undo log 的删除

针对于insert undo log 因为insert操作的记录,只对事务本身可见,对其他事务不可见。故该undo log可以在事务提交后直接删除,不需要进行purge操作。

针对于update undo log 该undo log可能需要提供MVCC机制,因此不能在事务提交时就进行删除提交时放入undo log链表,等 待purge线程进行最后的删除。

image-20221227165755962


http://www.ppmy.cn/news/7045.html

相关文章

【C语言进阶】指针的进阶

在初级阶段的《指针》章节已经接触过了,我们知道了指针的概念: 1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 2. 指针的大小是固定的4/8个字节(32位平台/64位平台)。 3. 指针是有类型&#…

MyBatis一级缓存和二级缓存

缓存的作用 在 Web 系统中,最重要的操作就是查询数据库中的数据。但是有些时候查询数据的频率非常高,这是很耗费数据库资源的,往往会导致数据库查询效率极低,影响客户的操作体验。于是可以将一些变动不大且访问频率高的数据&…

2023年网络安全预测

趋势科技预测2023年,网络犯罪分子仍将活跃并制定新的计划,但一些攻击者仍会坚持使用旧的工具和技术。积极主动的安全和保护对企业来说应该是最重要的。 报告中,根据整个网络安全格局,可分为以下几种: 持续的社会工程…

客快物流大数据项目(一百零一):实时OLAP开发

文章目录 实时OLAP开发 一、实时ETL处理 二、SparkSQL基于DataSourceV2自定义数据源

面试官:ui组件可以自动加载,那么业务组件可以吗?

大厂面试题分享 面试题库 前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 背景 笔者在最近在公司接手了一个老的对内使用的项目,接手后体验了下 发现首屏加载比较慢。分析了下大概的原因是main.js挂…

LeetCode题目笔记——1759. 统计同构子字符串的数目

文章目录题目描述题目难度——中等方法一:数学代码/C代码/Python总结题目描述 给你一个字符串 s ,返回 s 中 同构子字符串 的数目。由于答案可能很大,只需返回对 109 7 取余 后的结果。 同构字符串 的定义为:如果一个字符串中的…

Arco 属性

文章目录Arco介绍1. 简介1.1 背景1.2 运行环境1.3 浏览器兼容性2. 设计价值观2.1 清晰2.2 一致2.3 韵律2.4 开放3. 设计原则3.1 及时反馈3.2 贴近现实3.3 系统一致性3.4 防止错误发生3.5 遵从习惯3.6 突出重点3.7 错误帮助3.8 人性化帮助4. 界面总体风格4.1 页面风格4.1.1 主色…

HMS Core 3D流体仿真技术,打造移动端PC级流体动效

移动设备硬件的高速发展,让游戏行业发生翻天覆地的变化,许多酷炫的游戏效果不再局限于电脑端,玩家在移动端就能享受到场景更逼真、画质更清晰、体验更流畅的游戏服务。但由于移动设备算力不足,为了实现真实感的水体效果&#xff0…