前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >undolog回滚日志(MySQL)

undolog回滚日志(MySQL)

作者头像
红目香薰
发布2022-11-30 16:34:18
3.4K0
发布2022-11-30 16:34:18
举报
文章被收录于专栏:CSDNToQQCode

undolog基础概念:

undo log是mysql中比较重要的事务日志之一,顾名思义,undo log是一种用于撤销回退的日志,在事务没提交之前,MySQL会先记录更新前的数据到 undo log日志文件里面,当事务回滚时或者数据库崩溃时,可以利用 undo log来进行回退。

undolog的工作原理:

在更新数据之前,MySQL会提前生成undo log日志,当事务提交的时候,并不会立即删除undo log,因为后面可能需要进行回滚操作,要执行回滚(rollback)操作时,从缓存中读取数据。undo log日志的删除是通过通过后台purge线程进行回收处理的。

下面这个图是个好图,能更好的帮助大家理解,放大看一下就好理解了。

undo log是InnoDB事务特性的重要组成部分。当对记录做增删改操作就会产生undo记录,undo记录会记录到单独的表空间中。

首先,在MySQL5.6之前所有的undo log全部存储在系统表空间中(ibdata1);但是从5.6开始也可以使用独立表空间来存储undo log。

当前版本InnoDB默认有两个undo tablespace,也可以使用CREATE UNDO TABLESPACE语句动态添加,最大128个;每个undo tablespace至多可以有TRX_SYS_N_RSEGS(128)个回滚段。

Rollback Segment(回滚段)

InnoDB在undo tablespace中使用回滚段来组织undo log。同时为了保证事务的并发操作,在写undo log时不产生冲突,InnoDB使用 回滚段 来维护undo log的并发写入和持久化;而每个回滚段 又有多个undo log slot。通常通过Rollback Segment Header来管理回滚段,Rollback Segment Header通常在回滚段的第一个页,具体结构如下:

  • Max Size:参数名为 TRX_RSEG_MAX_SIZE,回滚段可以有用的最大page数。
  • History Size:参数名为TRX_RSEG_HISTORY_SIZE,history list包含的page数。
  • History List Base Node:参数名为TRX_RSEG_HISTORY,history list的Base Node。
  • Rollback Segment FSEG Entry:参数名为TRX_RSEG_FSEG_HEADER,file segment的存放位置。
  • Undo Slots Dictionary:参数名为TRX_RSEG_UNDO_SLOTS,存放活跃事务的undo header page no。

Rollback Segment Header里面最重要的两部分就是history listundo slot directory

其中history list把所有已经提交但还没有被purge事务的undo log串联起来,purge线程可以通过此list对没有事务使用的undo log进行purge。

每个事务在需要记录undo log时都会申请一个或两个slot(insert/update分开),同时把事务的第一个undo page放入对应slot中;所以理论上InnoDB允许的最大事务并发数为128(undo tablespace) * 128(Rollback Segment) * 1024(TRX_RSEG_UNDO_SLOTS)。下面我们进一步介绍undo log在磁盘上如何记录。

说道这里,基本上就理解差不多了,就不往下拓展了,没必要。知道是用于回滚的就行了。

有兴趣的可以继续深入探讨啊,我只是知识的使用者,不是创造者。希望多少能帮助到大家的面试。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • undolog基础概念:
  • undolog的工作原理:
    • Rollback Segment(回滚段)
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档