Mysql学习之事务日志redolog深入剖析

本文详细解释了MySQL事务的四个特性如何通过redo日志(重做日志)和undo日志来实现,着重讲解了redo日志的工作原理、刷盘策略以及InnoDB引擎的Write-AheadLogging技术在事务持久性和恢复中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql 事务日志 redo log

事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现的呢?
事务的隔离性由锁机制实现。而事务的原子性、一致性和持久性由事务的redo日志和undo日志来保证
REDO LOG 称为重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。
UNDO LOG 称为回滚日志,回滚行记录到某个特定的版本,用来保证事务的原子性、一致性。

REDO和UNDO都可以视为一种恢复操作,但是:
redo log:是存储引擎层生成的日志,记录的是物理级别上的页修改操作,比如页号xxx,偏移量yyy。主要是为了保证数据的可靠性。
undo log:是存储引擎层生成的日志,记录的是逻辑操作的日志。比如对某一行数据进行了INSERT的操作,那么undo log就记录一条与之相反的DELETE操作。主要用于事务的回滚(undo log记录的是每个修改操作的逆操作)和一致性非锁定读(undo log 回滚记录到某种特定的版本…MVCC 即多版本并发控制)
redo 日志
InnoDB存储引擎是以页为单位来管理存储空间的,再真正访问页面之前,需要把磁盘上的页缓存到内存中的Buffer Pool之后才可以正常访问呢。所有的变更都必须先更新缓冲池中的数据,然后缓冲池中的脏页会以一定的频率被刷入磁盘(checkpoint机制),通过缓冲池来优化CPU和磁盘之间的鸿沟,这样可以保证整体的性能不会下降的太快。
为什么需要redo 日志
在这里插入图片描述
另外一个解决的思路: 在这里插入图片描述
InnoDB引擎的事务采用了WAL技术(Write-Ahead Logging)。这种技术的思想就是先写日志,再写磁盘,只有日志写入成功,才算事务提交成功。这里的日志就是redo log.当发生宕机且数据未刷到磁盘的时候,可以通过redo log来恢复,保证ACID中的D,这就是redo log的作用。
在这里插入图片描述
REDO 日志的好处、特点
好处
redo 日志降低了刷盘频率
redo 日志占用的空间非常小
特点
redo 日志是顺序写入磁盘的
事务执行过程中,redo log不断的记录
在这里插入图片描述
redo的组成(内存层面与磁盘层面)
在这里插入图片描述
参数设置:innodb_log_buffer_size
默认大小为16M

SHOW VARIABLES LIKE 'innodb_log_buffer_size'

在这里插入图片描述
重做日志文件(redo log file) 保存在磁盘中,是持久的
在这里插入图片描述
在这里插入图片描述
redo的整体流程
以一个更新事务为例:
在这里插入图片描述
体会:Write-Ahead Log(预先日志持久化),在持久化一个数据页之前,先将内存中相应的日志页持久化。

redo log的刷盘策略
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
也就是说,一个没有提交事务的redo log记录,也可能会刷盘。因为事务执行过程redo log 记录是会写入 redo log buffer 中,这些redo log 记录会被后台线程刷盘
在这里插入图片描述
在这里插入图片描述
不同刷盘策略的演示(流程图)
默认情况
在这里插入图片描述
默认情况小结:
在这里插入图片描述
值为2的情形
在这里插入图片描述
值为2的小结:
在这里插入图片描述
值为0的情形
在这里插入图片描述
值为0的小结:
在这里插入图片描述
三种刷盘策略:
效率0>1>2,一致性1>2>0

写入redo log buffer 过程

在这里插入图片描述
redo日志写入log buffer
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
redo log block的结构图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
redo log file
位置

SHOW VARIABLES LIKE 'innodb_log_group_home_dir'

在这里插入图片描述
日志文件组
在这里插入图片描述
checkpoint
在这里插入图片描述
在这里插入图片描述
relog小结
在这里插入图片描述
深入学习可参考B站链接
B站链接–MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值