(26)redo和undo区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(26)redo和undo区别相关的知识,希望对你有一定的参考价值。

参考技术A redo(重做):1)改后 备份,保证事的持久化,一直写。保证事务 持久性,

                      2)记录: db变化日志,表、索引、undo数据块。nologging除外

undo(撤销还原):1)改前 备份    保证事务 原子性 。

                                2)记录: undo段,为保持读一致性的存 历史数据

ps: 为什么要保持读一致性?

A更改,B查询,并发:    A改没提交,B查历史  / rollback数据(源于UNDO)

A=1,B= 2    事务开始

    记录A=1到 undo log      改 A=3.   记录A=3到 redo log

    记录B=2到 undo log      改 B=4    记录B=4到 redo log

redo log写入磁盘    事务提交

1、事务 提交 (或每秒刷盘) 前 将 Redo Log持久化

2、事务提交前缓存在内存中,不写磁盘。 sync_binlog 决定何时 刷盘

问题:没commit前 ,随时从内存 写入表 数据块,属于 脏数据 。 

解决: db崩溃用 redo ,脏数据 还在 ,靠 undo旧数据覆盖(用rollback)

不管脏/旧,redo都复制

1.undo 是“ 数据文件 datafile”, 有表空间 ,有块block;

2.redo 是“ 文件 file”, 没表空间

前滚: 从以前 “正常点” ,前滚到 崩溃点

          回到正常点(一致点),数据清空,相当于之后什么都没发生。db用redo里重做(use redo log to redo),构造undo块,表块,索引块

回滚: 从 “崩溃点” 往 后 , 到一致

           表数据块中, 已修改未提交脏数据 , 前滚undo块撤销还原 , 覆盖回滚 rollback(保持一致性,每种块scn号都一样,db就可打开)

https://blog.csdn.net/z69183787/article/details/106638592/

https://blog.csdn.net/haiross/article/details/17003543

以上是关于(26)redo和undo区别的主要内容,如果未能解决你的问题,请参考以下文章

如何理解redo和undo的作用

online redo log 和undo各有啥作用

MySQL的日志:事务日志(redo log和undo log)

undolog实现事务原子性,redolog实现事务的持久性

MySQL性能优化InnoDB之日志文件

undo/redo功能的原理和思路