MySQL锁系列(四)之 undo log

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 什么是undo 1) redo 记录的是对页的重做日志,undo 记录的是对事务的逆向操作 2) undo 会产生redo,undo的产生也会伴随这redo的产生,因为重启恢复的时候,可以通过redo还原这些undo的操作,以达到回滚的目的 undo有什么用 1) 用于对事务的回滚 2)用于MVCC undo的存储结构 rollback segment * 在MySQL5.

什么是undo

1) redo 记录的是对页的重做日志,undo 记录的是对事务的逆向操作
2) undo 会产生redoundo的产生也会伴随这redo的产生,因为重启恢复的时候,可以通过redo还原这些undo的操作,以达到回滚的目的
AI 代码解读

undo有什么用

1) 用于对事务的回滚
2)用于MVCC
AI 代码解读

undo的存储结构

  • rollback segment
* 在MySQL5.1的年代,一个MySQL实例,就只有一个rollback segment
* 在MySQL5.1+ 的年代,一个MySQL实例里面,可以有128个rollback segment
AI 代码解读
  • undo segment
* 一个segment 有 1024undo slot,一个undo slot 对应一个undo log
* 一个事务(dml)对应一个undo log
AI 代码解读
  • 总结
据此推断:

1) 5.1 最多能够承载的并发事务(dml),1 * 1024 = 1024
2)5.1+ 最多能够承载的并发事务(dml),128 * 1024 = 10w左右

从此可以看出,5.1 之后的版本支持的并发写入事务数更多,性能更好
AI 代码解读

undo的格式

  • insert_undo
1) insert操作产生的undo
2)为什么要单独出来,因为insertundo可以立马释放(不需要purge),不需要判断是否有其他事务引用,本来insert的事务也没有任何事务可以看见它嘛
AI 代码解读
  • update_undo
1delete 或者 update 操作产生的undo日志
2)判断undo是否可以被删除,必须看这个undo上面是否被其他事务所引用
3) 如果没有任何事务引用,那么可以由后台线程purge掉这个undo
AI 代码解读
  • 如何判断undo日志是否有其他事务引用呢
1. 每一个undo log中都有一个DB_trx_id , 这个id记录的是该undo最近一次被更新的事务id
2. 如果这个id 不在readview(活跃事务列表) 里面,就可以认为没事务引用,即可删除?
AI 代码解读

undo存放在哪里

1) 5.6之前的版本,undo都是存放在ibdata,也就是所谓的共享表空间里面的
2) 5.6以及之后的版本,可以配置存放在单独的undo表空间中
AI 代码解读

什么是purge

1) delete语句操作的后,只会对其进行delete mark,这些被标记为删除的记录只能通过purge来进行物理的删除,但是并不回收空间
2undo log,如果undo 没有任何事务再引用,那么也只能通过purge线程来进行物理的删除,但是并不回收空间
AI 代码解读

purge后空间就释放了吗

1) undo page里面可以存放多个undo log日志
2)只有当undo page里面的所有undo log日志都被purge掉之后,这个页的空间才可能被释放掉,否则这些undo page可以被重用
AI 代码解读

DML的相关物理实现算法

  • 主键索引
1. 对于delete   --需要undo绑定该记录才能进行回滚,所以只能打上标记,否则undo指向哪里呢

    delete mark

2. 对于update  --原记录可以物理删除,因为可以在新插入进来的地方进行undo绑定

    * 如果不能原地更新: delete(注意:这里是直接delete,而不是delete mark)  + insert
    * 如果可以原地更新,那么直接update就好
AI 代码解读
  • 二级索引
1. 对于delete  --不能直接被物理删除,因为二级索引没有undo,只能通过打标记,然后回滚。否则如果被物理删除,则无法回滚

    delete mark


2. 对于update  --不能直接被物理删除,因为二级索引没有undo,只能通过打标记,然后回滚。否则如果被物理删除,则无法回滚

    delete mark + insert
AI 代码解读
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
兰春
+关注
目录
打赏
0
0
0
2
302
分享
相关文章
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
39 16
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
29 4
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
1510 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
115 9
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
158 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
85 13
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
54 5
图解MySQL【日志】——Redo Log
|
6月前
|
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
606 3

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等