首页 > 数据库 > 数据库其它

数据库undo日志

admin 数据库其它 2021-05-25 09:25:37
后台-系统设置-扩展变量-手机广告位-内容正文底部

为了保证事务的原子性,设计InnoDB的大叔引入了undo日志,undo日志记载了回滚一个操作所需的必须内容。

在事务对表中的记录进行改动时,才会为这个事务分配一个唯一的事务id。事务id值时一个递增的数字。先被分配的id的事务得到的是较小的事务id,后被分配id的事务得到的是较大的事务id。未被分配事务id的默认为0.聚簇索引记录中有一个trx_id隐藏列,它代表对这个聚簇索引记录进行改动的语句所在的事务对应的事务id

不同的场景有不同类型的undo日志,比如TRX_UNDO_INSERT_RECRRX_UNDO_DEL_MARK_RECTRX_UNDO_UPD_EXIST_REC等。
类型FIL_PAGE_UNDO_LOG的页面是专门用来存储undo日志的,我们简称Undo页面。
在一个事务执行过程中,最多分配4个Undo页面链表,分别是:

  • 针对普通表的insert undo链表
  • 针对普通表的update undo链表
  • 针对临时表的insert undo链表
  • 针对临时表的update undo链表

只有真正用到这些链表的时候才会去创建它们

每个undo页面链表都对应一个Undo Log SegmentUndo页面链表的第一个页面中有一个名为Undo Log Segment Header的部分,专门用来存储关于这个段的一些信息。

同一个事务向一个Undo页面链表中写入undo日志算是一个组,每个组都以一个Undo Log Header部分开头。
一个Undo页面链表如果可以被重用,需要符合下面的条件;

  • 该链表中只包含一个Undo页面;
  • Undo页面已经使用的空间小于整个页面空间的3/4。

每个Rollback Segment Header页面都对应着一个回滚段,每个回滚段包含1024undo slot,一个undo slot代表一个Undo页面链表的第一个页面的页号,目前,InnoDB最多支持128个回滚段,其中第0号,第33-127号回滚段是针对普通表设计的,第1-32号回滚段是针对临时表设计的。

文章来源:https://blog.csdn.net/weixin_43213064/article/details/117196015

后台-系统设置-扩展变量-手机广告位-内容正文底部
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
本文地址:https://www.jcdi.cn/shujukuqita/30753.html

留言与评论(共有 0 条评论)
   
验证码:
后台-系统设置-扩展变量-手机广告位-评论底部广告位

教程弟

https://www.jcdi.cn/

统计代码 | 京ICP1234567-2号

Powered By 教程弟 教程弟

使用手机软件扫描微信二维码