什么是undo log日志?什么是redo log是什么?undo log日志和redo log的区别是啥?

2 个回答

  • 小菜鸟
    二八佳人体似酥,腰间仗剑斩凡夫。
    ### undo log 是什么? undo log是一种逻辑日志,是旧数据的备份。有两个作用用于事务回滚和MVCC。 1. **INSERT** 操作的 `UNDO LOG` 记录 `DELETE`,回滚时删除插入的数据。 2. **DELETE** 操作的 `UNDO LOG` 记录被删除的数据,回滚时重新插入该数据。 3. **UPDATE** 操作的 `UNDO LOG` 记录修改前的旧值,回滚时用旧值覆盖新值。 4. **SELECT** 不生成 `UNDO LOG`,因为查询操作不影响数据。 ### redo log是什么? redo log用于保证数据的持久性。redo log记录的是数据页的物理变化,是物理日志,是新数据的备份,在事务提交前,将redo log 持久化就行,不需要将数据持久化,系统崩溃时,可以根据redo log将数据恢复到最新状态。 redo log只做顺序追加操作,当事务需要回滚时,在redo log中也不会删除之前的事务记录。 默认是每次事务提交时必须调用fsync操作将redo缓冲区的内容写入磁盘。 例如:将A=1修改为A=2,它的流程如下: 1.事务开始 2.将原始数据A=1从磁盘读取到内存,生成反向语句,写入undolog。 3.修改A=2, 4.生成一条redo log 写入到redo log 缓冲区 5.调用fsync操作将redo log 缓冲区的内容写入到磁盘,写入binlog 6.事务提交。
    编辑于 2023-08-18 22:30 •IP属地 美国
    举报
    评论
    收藏

  • 无邪
    鸟随鸾凤飞腾远,人伴贤良品自高。
    undo日志是记录修改前的数据,用于数据库回滚。redo日志是记录修改后的数据,用于提交事务后写入数据文件。 ### undo log 主要是保证事务的原子性,事务执行失败就回滚,用于在事务执行失败后,对数据回滚。 是逻辑日志,记录的是SQL语句。 在事务提交后,undo log日志不会立即删除,会放到一个待删除的链表中,有purge线程判断是否有其他事务在使用上一个事务之前的版本信息,然后决定是否可以清理,简单的来说就是前面的事务都提交成功了,这些undo才能删除。 ### redo log 就是为了保证事务的持久性,在做数据更新操作时,先将对数据页的更改记录到redo log,然后再去更新内存中的数据页,在下次查询数据页或者空闲时间,将操作记录更新到磁盘。这样可以将随机I/O改为顺序I/O。 优点是减少磁盘I/O次数,即便发生故障也可以根据redo log来将数据恢复到最新状态。 缺点是会造成内存脏页,后台线程会自动对脏页刷盘,或者是淘汰数据页时刷盘,此时会暂时查询操作,影响查询。
    编辑于 2022-08-21 10:30 •IP属地 美国
    举报
    评论
    收藏