redo log 拾遗「一」|小册免费学

本篇文章主要是将学习 redo log 中自己值得记录的学习点。

MTR 设计的目的

解释一下什么是 MTR

MySQL中把对底层页面的一次原子访问的过程称之为一个 Mini-Transaction,这里的原子操作,指的是要么全部成功,要么全部失败,不存在中间状态。

举个例子:

insert into schedule(tid, sid, uid, address) value (2, 12, 56xd, '上海')

如果说 tid = 2 应该插入 page 8 但此时page 8 已经满了,从而页分裂:新生成一个页,然后插入数据,最后把 tid = 2 插入。首先这个过程必须是原子的;其次其实在整个过程里面,不管是索引本身结果;还是页本身的信息(header,checksum。。。)都发生了变化,这些都是要记录下来的,不然要回滚这个事务靠什么?

所有 redo log 一定是连串的,但是同时要保证原子完成,最直观的想法就是 redo log group ,这个就是 Mini-Transaction 产生的原因。

image.png

redo log 写入

image.png

过程如下:

  1. MTR 运行中产生的若干 redo log 成不可分割组,暂存在内存
  2. MTR 结束时,将组内产生的 redo log 复制到 log buffer【并发插入,可能有锁竞争】
  3. 时机成熟,写入磁盘【找到一片连续的空间,写入即可,此为顺序写入

说几个其中涉及的参数:

  1. LSN:全局变量,记录已经写入的 redo 日志量,总和值【包括 log block header
  2. buf_free:标记下一个 redo 应该写入到 log buffer 的地方
  3. buf_next_to_write:全局变量,标记 log buffer 已经有多少日志被刷盘
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享