mysql怎样清空undo日志_MySql--undo日志(下)

具体细节 请去掘金购买《MySQL 是怎样运行的:从根儿上理解 MySQL》

通用链表结构(页通过这些pageNumebr和offset组成双端链表)

1.在写入undo日志的过程中会使用到多个链表。

2.在某个表空间内,我们可以通过一个页的页号和在页内的偏移量来唯一定位一个节点的位置

3.Pre Node Page Number和Pre Node Offset的组合就是指向前一个节点的指针

4.Next Node Page Number和Next Node Offset的组合就是指向后一个节点的指针。

基节点的结构

1.List Length表明该链表一共有多少节点。

2.First Node Page Number和First Node Offset的组合就是指向链表头节点的指针。

3.Last Node Page Number和Last Node Offset的组合就是指向链表尾节点的指针

FIL_PAGE_UNDO_LOG页面--专门用来存储undo日志

Undo Page Header

1.TRX_UNDO_PAGE_TYPE:本页面准备存储什么种类的undo日志

2.一个Undo页面的只能存储一种类型的undo日志,不能混合存储。

3.类型主要有TRX_UNDO_INSERT_REC和除了TRX_UNDO_INSERT_REC,比如TRX_UNDO_DEL_MARK_REC、TRX_UNDO_UPD_EXIST_REC啥的,一般由DELETE、UPDATE语句产生的undo日志属于这个大类。

4.其中TRX_UNDO_INSERT_REC是由insert语句产生,事务提交后可以删除。而其他的类型的则留作MVCC

5.TRX_UNDO_PAGE_START:表示第一条undo日志在本页面中的起始偏移量。

6.TRX_UNDO_PAGE_FREE:与上边的TRX_UNDO_PAGE_START对应,表示当前页面中存储的最后一条undo日志结束时的偏移量

7.TRX_UNDO_PAGE_NODE:代表一个List Node结构

Undo页面链表

单个事务中的Undo页面链表

1.一个事务中产生的undo日志占用的页面组成了链表,就是TRX_UNDO_PAGE_NODE

2.由于undo日志不能混合存储,因此很有可能产生两个页面链表,一个是insert,一个是update

3.此外规定对普通表和临时表的记录改动时产生的undo日志要分别记录

4.所以一个事务最多有4个以undo页面为节点组成的链表

5.当然,并不是在事务一开始就会为这个事务分配这4个链表,具体分配策略如下:

6.刚刚开启事务时,一个Undo页面链表也不分配。

7.当事务执行过程中向普通表中插入记录或者执行更新记录主键的操作之后,就会为其分配一个普通表的insert undo链表。

8.当事务执行过程中删除或者更新了普通表中的记录之后,就会为其分配一个普通表的update undo链表。

9.当事务执行过程中向临时表中插入记录或者执行更新记录主键的操作之后,就会为其分配一个临时表的insert undo链表。

10.当事务执行过程中删除或者更新了临时表中的记录之后,就会为其分配一个临时表的update undo链表。

多个事务中的Undo页面链表

1.多个事务和单个事务的链表没有区别

2.每个事务都生成自己的链表

undo日志具体写入过程

段(Segment)的概念

1.段是

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值