redolog和undolog

本文介绍了MySQLInnoDB存储引擎中的redolog(重做日志)和undolog(撤销日志)机制,强调了redolog在保证事务持久性和顺序IO效率中的作用,以及undolog如何实现事务的原子性,确保数据一致性。
摘要由CSDN通过智能技术生成

一、什么是redolog

redolog是基于InnoDB存储引擎下的日志文件,也叫重做日志。用于记录数据页的物理变化,记录数据修改后的值。无论事务是否成功提交都会产生记录。当mysql产生故障,可以采用redolog日志恢复数据,同时redolog日志是顺序写入磁盘,也就是顺序IO,刷盘速率快。MYSQL事务的持久性就体现在这一方面。

redolog包括两部分,一是redolog buff(内存中的日志缓冲区),一是redolog file(日志文件)。MYSQL执行一次DML语句,会先将记录写入redlog buff中,后在某一个时间点再一次性将这些记录写入redolog file。也就是WAL(Write-Ahead Logging)技术(先写日志后刷盘)

二、为什么需要redolog

简单来讲,redolog保证了事务的持久性。InnoDB引擎下,数据的读写操作都是在从磁盘文件(idb文件)中一次性拷贝一页的数据到buff pool中。事务提交后buff pool不会立即刷盘(因为InnoDB是以页为单位与磁盘进行交互的,一个事务可能只修改了一页上的几个字节,此时如果将整页数据进行刷盘太浪费资源。二是因为一个事务涉及到的数据可能存放在多个数据页上,彼此并不连续。也就是会产生随机IO,随机IO需要进行磁盘的磁头寻道等操作会消耗更多随机成本)

所以需要引入redolog,任意事务对任意页进行的修改都会记录在redolog里,在事务提交后,我们只需要保证redolog成功落盘即可,同时redolog是追加写操作,也就是顺序IO,落盘时时间成本低。即使mysql宕机了,我们也可以通过redolog恢复数据。

三、undolog

undolog用来实现事务四大特性中有一个是原子性,原子性是指对数据库的一系列操作,要么全部成功,要么全部失败,不可能出现部分成功的情况。

undo log主要记录数据的逻辑变化,比如一条INSERT语句对应一掉DELETE的undo log,一个UPDATE语句对应一条相反的undo log,这样在发生错误的时候,可以使事务回滚到之前的数据状态。

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白日日白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值