redo日志01---redo日志的基本格式

1. 为什么要有redo日志

  试想以下场景,当事务对表修改,在缓存区会产生若干脏页.如果提交事务,在缓存中的脏页还没有来得及刷新到磁盘就断电了,事务持久性被破坏了,redo日志就是解决提交后的事务持久性而生的.
  面对上面的情形,我们可以简单粗暴地每提交一次事务,就把涉及到的脏页刷新到磁盘(而不是flush_lru时),每次只修改页面中的部分内容就刷新一次(虽然页面还在缓存)未免太耗费时间了(与磁盘交互).另外,当事务操作涉及到多个表时,由于不同的表在不同的段中,这些修改的页面可能物理上十分分散,name刷新势必造成大量的随机I/O.
  我们可以把页面的修改信息记录下来,比如某一页额某一偏移量处的值从2改为了3,这样即使断电,我们下次开机根据我们记录的操作在执行一遍就能恢复数据,我们记录的操作就是日志.

2. 修改一条记录时的redo 日志格式

3. 插入记录时的日志结构

1. 插入一条记录,改变了哪些量?

  向表中插入一条记录,系统表空间的一些页面会发生改变(例如最大主键).插入的页面会改变,如果页面发生分裂,可能会产生新的数据页或索引页(系统页面修改段 区信息,链表统计信息等).
  具体到每一个页面,数据区肯定会发生改变,上一个记录也会发生改变(指向自己了),页面头部 文件头部 页面尾部 页目录也可能会发生改变(例如槽可能不发生变化,目录也就不会变化)
可能被修改的地方
插入一条记录,竟然改变了页面中的那么多地方,对应的日志需要包含上述信息.

2. mlog_comp_rec_insert日志

在这里插入图片描述
该日志记录了回复一条数据的必备要素,恢复时,调用插入页面函数向该页面插入数据即可.

3. 日志组

悲观插入时,为了完成一条记录的操作,需要修改多个页面.这些页面的修改,要么不做,要么全做,成为原子性操作.这些操作所对应的日志形成一个日志组,数据恢复时,要门全部执行该组redo日志,要么不执行.
在这里插入图片描述
如果某次插入只产生一条redo日志,为了节省空间,不会有结尾标志,而是type的第一个bit置1(日志类型不超过127)表示该日志组只有一条日志
在这里插入图片描述

4, MTR 最小事务

对底层页面的一次原子访问成为一个MTR.一个NTR对应一组redo日志

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

弈师亦友

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

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

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

打赏作者

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

抵扣说明:

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

余额充值