数据库innodb使用redo log数据恢复原理

本文详细介绍了InnoDB存储引擎如何使用redo log进行数据恢复,包括脏页、redo log、MTR、LSN和checkpoint的概念及作用。脏页在内存中更新后不立即写入磁盘,而是记录在redo log中。redo log采用顺序写提高性能,并在特定条件下刷盘。MTR确保一系列原子操作的恢复。LSN用于跟踪redo log的写入位置。checkpoint用于确定恢复的起点,防止已刷新到磁盘的脏页被错误恢复。
摘要由CSDN通过智能技术生成

数据库innodb使用redo log数据恢复原理


涉及五个关键知识:

  • dirty page
  • redo log
  • MTR
  • LSN
  • checkpoint

dirty page 脏页

脏页既是对一条记录进行更新时,innodb将该记录所在的页读取到内存,然后在内存中对该数据进行更新。此时内存页中数据有修改,且还没有写入到文件中,此时的内存页就叫做脏页。

innodb不会将内存页中修改的数据立即刷新到文件中,而是将写操作产生的变化以日志的形式记录到redo log文件中,当服务意外崩溃重启时,会读取redo log,对没有写入文件的数据进行恢复。

innodb不会将内存页中修改的数据立即刷新到文件中的原因是写redo log是顺序写入,不会产生随机io。随机io将导致磁盘频繁寻道,写入性能很低。

所有这些脏页会在内存中串成一个链表,以每个页首次被修改的时间为顺序排列,最早被修改的页位于链表尾部。

redo log

redo log也称作重做日志,redo log将所有的写操作以规定的格式顺序记录到redo日志中。例如一条insert语句的redo log将包含表空间id、插入的记录所在的页号、insert的具体数据。

redo log也不是一旦有新的日志就写入文件,innodb为redo log在内存开辟了一个redo log buffer,新的日志先写入这个内存中,在合适的时机再将新的日志刷盘到redo log文件中。这个刷盘时机有如下几种:

当redo日志量已经占满了log buffer总容量的50%左右,就需要把这些日志刷新到磁盘中
事务提交时ÿ

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值