详述MySQL undo log功能以及它在MVCC支持下如何运作。

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 总结而言, MySQL undo logs 在 MVCC 支持下确保了即使在高并发环墀下各自隔离运作各自业务流程同时还能确保整体数据完整性安全无误地管理着所有可能出现场景需求 包括但不限於正常业务流程处理异常情况紧急撤销需求以及长期健康稳健运营基础设施建设需求

MySQL的undo log是一种用于实现事务的原子性和持久性的日志机制。在事务处理过程中,undo log记录了数据变更前的状态,这样如果事务需要回滚(rollback),系统可以利用这些信息将数据恢复到原始状态。同时,在多版本并发控制(MVCC)环境下,undo log也支持读取一致性视图。

在MySQL中,当一个事务开始修改数据时(例如更新一个记录),存储引擎会将修改前的记录写入到undo log中。每个修改动作都会产生相应的undo日志条目,并且每个条目都与特定版本号关联。

MVCC是数据库管理系统并发控制的一种方法,在读写操作频繁发生时能够提供高效率和低锁争用。它允许多个事务同时对同一数据进行读取而不相互干扰,并且能够看到在特定时间点或者时间范围内数据库快照级别上稳定、一致地视图。

当使用MVCC时,不同版本号代表了数据库变更历史上不同点上提交完成后数据库状态快照;每次查询操作都可以通过当前系统版本号来确定应该看到哪些更新——即只有那些提交时间戳小于等于查询开始时刻系统版本号、并且未被后续更新删除或覆盖过得记录才对该查询可见。

具体来说,在执行SELECT操作时:

  1. 系统首先确定当前SELECT语句执行所处时间点对应得全局唯一递增版版好。
  2. 然后根据这个全局唯一递增版好去检索需要访问得表。
  3. 如果遇见行级锁或者其他阻塞因素,则通过检查行关联得隐藏列——包含创建此行纪录得交易ID以及可能删除此纪录交易ID——与当前SELECT语句执行所处时间点进行比较。
  4. 如果创建此行纪录交易ID小于等于全局唯一递增版好,并且没有被标记为删除或者标记为删除但相关交易ID大于全局唯1递增编号,则认为该纪录可见;否则跳过继续检索下一个符合条件项。

如果要回滚某项操作:

  1. MySQL会查找相关联未完成transaction产生之undolog信息。
  2. 根据undolog里面保存之前值恢复覆盖现有值达成撤销效果。
    3.撤销完毕后释放所有相关资源包括锁以及内存空间等待GC处理清理工作

Undo logs也支持垃圾收集机制:随着新transaction生成新undologs,旧已经没有必要保留供任何活跃transaction参考之早期历史undologs就可以清理释放资源空间给新活动使用提高整体效率减少无谓开销保证稳定运转

总结而言, MySQL undo logs 在 MVCC 支持下确保了即使在高并发环墀下各自隔离运作各自业务流程同时还能确保整体数据完整性安全无误地管理着所有可能出现场景需求 包括但不限於正常业务流程处理异常情况紧急撤销需求以及长期健康稳健运营基础设施建设需求

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
10月前
|
存储 监控 Linux
Linux环境锁定关键文件防止误删操作流程。
总结以上内容,在Linux环境下锁定重要文档避免误删涉及到多种技术手段与策略组合运作, 包括但不限于利用chatter指挥官固化文档状态至只读模式、运作ACL精准调整访问权利列表、编排自动化流程简
487 20
|
10月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
634 143
|
10月前
|
安全 Java
Java中的Switch表达式:更简洁的多路分支
Java中的Switch表达式:更简洁的多路分支
724 211
|
10月前
|
安全 Java API
Java中的Lambda表达式:简洁与功能的结合
Java中的Lambda表达式:简洁与功能的结合
558 211
|
10月前
|
存储 Java API
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
369 92
|
10月前
|
监控 Linux 网络安全
CentOS操作系统时间同步更新指南。
遵循以上指南将帮助您 在 CentOS 上成功 设置 和 维 技 时间 同 步 . 这不但能够提高日志记录精准 度 和计划任务执行效率,还能够提高整个网络环境 中所有设备之间 的 协作效率.
1811 17
|
10月前
|
Java 数据安全/隐私保护 Spring
【面向接口开发(IOP)典型场景】底层组件如何实现回调通知上层应用系统?
本文介绍了在账务插件开发中,如何通过“面向接口编程”实现异步转账完成后的回调通知机制。通过定义回调接口 `TransferCallback`,账务组件在异步操作完成后可通知上层应用进行后续业务处理。文章提供了纯 Java 和 Spring 两种实现方式的代码示例,展示了接口在插件化架构中的重要作用,体现了面向接口编程在解耦与扩展方面的优势。
279 1
|
10月前
|
安全 Java C++
synchronized 原理
本文详解 Java 中 `synchronized` 的底层实现原理及锁升级机制。通过 Monitor 对象管理线程竞争,涉及 owner、EntryList、WaitSet 等结构,并介绍偏向锁、轻量级锁、重量级锁的升级过程。同时对比 `synchronized` 与 `volatile`、`Lock` 的区别,涵盖原子性、可见性、有序性及功能扩展性,帮助理解并发编程中的线程安全机制。
292 0