本篇文章主要是将学习 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 产生的原因。

redo log 写入

过程如下:
- MTR运行中产生的若干 redo log 成不可分割组,暂存在内存
- MTR结束时,将组内产生的 redo log 复制到- log buffer【并发插入,可能有锁竞争】
- 时机成熟,写入磁盘【找到一片连续的空间,写入即可,此为顺序写入】
说几个其中涉及的参数:
- LSN:全局变量,记录已经写入的- redo日志量,总和值【包括- log block header】
- buf_free:标记下一个- redo应该写入到- log buffer的地方
- buf_next_to_write:全局变量,标记- log buffer已经有多少日志被刷盘
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
    





















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
