当前位置: 首页 > news >正文

(Mysql)MVCC、Redo Log 与 Undo Log

1. MVCC(多版本并发控制)

概念
MVCC(Multi-Version Concurrency Control)是一种数据库并发控制机制,用于解决 读写冲突,提高数据库并发性能。MySQL InnoDB 存储引擎使用 MVCC 来实现 非阻塞读(即读取时不加锁)。

核心原理

  • 每行数据在内存中有多个版本。

  • 每个版本包含两个隐藏列:

    • trx_id:记录创建该版本的事务 ID。

    • roll_pointer(或 undo_pointer):指向旧版本 Undo Log。

  • 读取数据时,事务根据 自己的快照版本 决定看到哪个版本的数据。

作用

  1. 支持 一致性读(Consistent Read)

  2. 避免读操作阻塞写操作

  3. 与事务隔离级别结合使用(如 Repeatable Read)

举例

  • 事务 A 读取数据时看到的版本是事务开始时的快照

  • 事务 B 更新同一行数据时,会生成新版本,并在 Undo Log 中保存旧版本

  • 事务 A 仍然看到旧版本,不会被阻塞


2. Redo Log(重做日志)

概念
Redo Log 是 InnoDB 的 物理日志,用于 保证事务的持久性(Durability)

特点

  • 顺序写入磁盘,性能高

  • 数据写入前先写 Redo Log,再刷入数据页(Write-Ahead Logging)

  • 崩溃恢复时,通过 Redo Log 恢复已提交事务的数据

顺序流程(插入数据示例)

  1. 事务写入 Redo Log(WAL,顺序追加)

  2. 数据页写入缓冲池

  3. 事务提交时,Redo Log 刷盘(保证持久性)

作用

  • 崩溃恢复:只要 Redo Log 存在,已提交的数据可以恢复

  • 提高写入性能:顺序写比随机写快


3. Undo Log(回滚日志)

概念
Undo Log 是 InnoDB 的 逻辑日志,用于 事务回滚MVCC 版本管理

特点

  • 每条修改操作都会记录 Undo Log

  • 保存的是旧数据版本

  • 写操作失败或事务回滚时,用 Undo Log 恢复数据

作用

  1. 事务回滚:事务出错时,可通过 Undo Log 回到操作前状态

  2. MVCC 读:一致性读时,事务可通过 Undo Log 获取旧版本数据

示例

  • 数据库原值:A = 10

  • 事务修改:A = 20

  • Undo Log 保存旧值 A = 10

  • 事务回滚时,用 Undo Log 恢复 A = 10


4. Redo Log vs Undo Log

特性Redo LogUndo Log
类型物理日志逻辑日志
存储位置磁盘顺序写内存 + 磁盘
用途崩溃恢复回滚、MVCC版本读取
记录内容新数据旧数据
持久性持久化(保证事务提交)临时(事务回滚后可释放)

5. 总结

  • MVCC:保证高并发下的一致性读,靠 Undo Log 保存历史版本

  • Redo Log:保证事务提交的持久性,顺序写入磁盘

  • Undo Log:支持事务回滚和 MVCC 版本管理

理解技巧

  • Redo Log = Ctrl+S(存储最新修改,保证不会丢)

  • Undo Log = Ctrl+Z(保存历史版本,可以撤回操作)

  • MVCC = 时间旅行(每个事务看到自己时间点的版本)

http://www.dtcms.com/a/362203.html

相关文章:

  • C#知识学习-012(修饰符)
  • Python OpenCV图像处理与深度学习:Python OpenCV边缘检测入门
  • FastLED库完全指南:打造炫酷LED灯光效果
  • 【Excel】将一个单元格内​​的多行文本,​​拆分成多个单元格,每个单元格一行​​
  • 【设计模式】--重点知识点总结
  • C++ Bellman-Ford算法
  • Linux并发与竞争实验
  • 软件使用教程(四):Jupyter Notebook 终极使用指南
  • 数据分析编程第八步:文本处理
  • 设计模式-状态模式 Java
  • 华清远见25072班I/O学习day2
  • PostgreSQL备份指南:逻辑与物理备份详解
  • 椭圆曲线群运算与困难问题
  • 【数据分享】多份土地利用矢量shp数据分享-澳门
  • AI产品经理面试宝典第81天:RAG系统架构演进与面试核心要点解析
  • Qt中的信号与槽机制的主要优点
  • 自动化测试时,chrome浏览器启动后闪退的问题
  • 【趣味阅读】Python 文件头的秘密:从编码声明到 Shebang
  • VisionProC#联合编程相机实战开发
  • 【云存储桶安全】怎么满足业务需求,又最大程度上满足信息安全要求呢?
  • 1792. 最大平均通过率
  • 学习:uniapp全栈微信小程序vue3后台-暂时停更
  • 本地没有公网ip?用cloudflare部署内网穿透服务器,随时随地用自定义域名访问自己应用端口资源
  • 液态神经网络:智能制造的新引擎
  • 【跨境电商】上中下游解释,以宠物行业为例
  • 洛谷 c++ P1177 【模板】排序 题解
  • AutoSar RTE介绍
  • 特征增强方法【特征构建】
  • MVC、三层架构
  • RT-DETR网络结构