UNDO LOG日志

embedded/2024/12/3 0:04:15/

目录

undo log的作用

undo log的生成与管理

undo log与事务操作

undo log的配置与优化

undo log结构

整体结构

回滚段(Rollback Segment)

undo log段(Undo Log Segment)

undo log页(Undo Log Page)

undo log记录(Undo Log Record)

文件组织方式


MySQL数据库的InnoDB存储引擎中的undo log(回滚日志)是确保事务ACID特性中原子性的关键组件。以下是对undo log的详细解释:

undo log的作用

  1. 实现事务回滚

    • 在事务处理过程中,如果出现了错误或者用户执行了ROLLBACK语句,MySQL可以利用undo log中的历史数据将数据恢复到事务开始之前的状态。
  2. 实现多版本并发控制(MVCC)

    • undo log为每条记录保存多份历史数据,MySQL在执行快照读(普通SELECT语句)的时候,会根据事务的Read View里的信息,顺着undo log的版本链找到满足其可见性的记录。

undo log的生成与管理

  1. 生成时机

    • 每当InnoDB引擎对一条记录进行操作(修改、删除、新增)时,会把回滚时需要的信息都记录到undo log里。
  2. 管理方式

    • InnoDB对undo log文件的管理采用段的方式,即回滚段(rollback segment)。每个回滚段记录了多个undo log segment,每个事务只会使用一个undo log segment。
    • 在MySQL 5.5及之前的版本中,只有一个回滚段,因此最大同时支持的事务数量为1024个。从MySQL 5.6开始,InnoDB支持最大128个回滚段,因此其支持同时在线的事务限制提高到了128×1024。
  3. 回收处理

    • 事务在提交时,并不会立刻删除undo log。InnoDB会将该事务对应的undo log放入到删除列表中,后续会通过后台线程purge thread进行回收处理。

undo log与事务操作

  1. 插入操作

    • 在插入一条记录时,undo log会记录这条记录的主键值。这样,在回滚时只需要把这个主键值对应的记录删掉即可。
  2. 删除操作

    • 在删除一条记录时,undo log会记录这条记录中的内容。这样,在回滚时再把由这些内容组成的记录插入到表中即可。
  3. 更新操作

    • 在更新一条记录时,undo log会记录被更新的列的旧值。这样,在回滚时再把这些列更新为旧值即可。

undo log的配置与优化

  1. 设置undo log文件所在的路径

    • 可以通过innodb_undo_directory参数来设置undo log文件所在的路径。该参数的默认值为"./",即innodb数据文件存储位置。
  2. 设置undo log文件内部回滚段的个数

    • 可以通过innodb_undo_logs参数来设置undo log文件内部回滚段的个数。默认值为128。
  3. 设置undo log文件的数量

    • 可以通过innodb_undo_tablespaces参数来设置undo log文件的数量,这样回滚段可以较为平均地分布在多个文件中。

undo log结构

整体结构

undo log存放在数据库内部的一个特殊段中,这个段称为undo段,它位于共享表空间中。从MySQL 5.6版本开始,undo log也可以存储在独立表空间中。

回滚段(Rollback Segment)

  1. 概念

    • 回滚段是undo log的一种组织方式,它用于维护undo log的并发写入和持久化。
  2. 结构

    • 每个回滚段记录了多个undo log segment(slot),每个事务在需要记录undo log时会申请一个或两个slot(insert和update/delete分开)。
    • Rollback Segment Header(回滚段头)通常位于回滚段的第一个页,它管理着回滚段的各种信息,如最大page数、history list包含的page数、history list的Base Node等。

undo log段(Undo Log Segment)

  1. 概念

    • undo log段是undo log的基本存储单位,它包含了多个undo log page。
  2. 结构

    • 每个undo log段都有一个Undo Segment Header(undo段头),它记录了该段的状态、最后一个undo log header的位置等信息。
    • undo log page是undo log的实际存储单元,它包含了undo log记录以及页头信息等。

undo log页(Undo Log Page)

  1. 概念

    • undo log页是undo log记录的基本存储单元,它包含了多个undo log记录。
  2. 结构

    • 每个undo log页都有一个页头(Undo Page Header),它记录了该页的一些状态信息,如页类型、最新事务开始记录undo log的起始位置、页内空闲空间起始地址等。
    • undo log记录则存储在页体的空闲空间中,每个记录都包含了事务ID、事务号、删除标记、日志起始偏移量等信息。

undo log记录(Undo Log Record)

  1. 概念

    • undo log记录是undo log的最小存储单元,它记录了某个事务对数据库的具体修改操作。
  2. 结构

    • undo log记录包含了事务ID、事务号、操作类型(如insert、update、delete)、操作前的数据值等信息。对于insert操作,undo log记录会包含插入记录的主键值;对于delete操作,undo log记录会包含被删除记录的内容;对于update操作,undo log记录会包含被更新列的旧值。

文件组织方式

  1. header page和normal page

    • undo page一般分为header page和normal page两种。header page除了包含normal page的信息外,还包含一些undo segment信息。一个undo header page同一时刻只隶属于同一个活跃事务,但它可能包含多个已经提交的事务和一个活跃事务的undo log记录。当活跃事务产生的undo record超过undo header page容量后,会单独再为此事务分配undo normal page。
  2. history list

    • 已经提交但还没有被purge线程回收的undo log会被串联起来形成一个history list。purge线程可以通过这个list对没有事务使用的undo log进行回收处理。

http://www.ppmy.cn/embedded/142450.html

相关文章

Opencv+ROS实现摄像头读取处理画面信息

一、工具 ubuntu18.04 ROSopencv2 编译器:Visual Studio Code 二、原理 图像信息 ROS数据形式:sensor_msgs::Image OpenCV数据形式:cv:Mat 通过cv_bridge()函数进行ROS向opencv转换 cv_bridge是在ROS图像消息和OpenCV图像之间进行转…

使用Hugo和GitHub Pages创建静态网站个人博客

不需要服务器,不需要域名,不需要数据库,可以选择模版,内容为Markdown格式。 Hugo:https://gohugo.io 文档:https://gohugo.io/getting-started/quick-start/ 中文文档:https://www.gohugo.or…

软件工程头歌实训作业:Junit实训入门篇

第1关:第一个Junit测试程序 任务描述 请学员写一个名为testSub()的测试函数,来测试给定的减法函数是否正确。 相关知识 Junit编写原则 1、简化测试的编写,这种简化包括测试框架的学习和实际测试单元的编写。 2、测试单元保持持久性。 3、利用…

20241128解决Ubuntu20.04安装libesd0-dev异常的问题

20241128解决Ubuntu20.04安装libesd0-dev异常的问题 2024/11/28 16:36 缘起:中科创达的高通CM6125开发板的Android10的编译环境需要。 安装异常:rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ sudo apt-get install libesd0-dev Readi…

第七章selinux----第八章防火墙

1、selinux的说明 SELinux是Security-Enhanced Linux的缩写,意思是安全强化的linux。 SELinux 主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用。 系统资源都是通过程序进行访问的,如果将 /var/ww…

Vue.js 深入探索:自定义指令与插件开发

Vue.js 是一个轻量级、易于上手的前端框架,但它的灵活性和强大功能远不止于此。Vue 提供了丰富的内置指令(如 v-bind、v-if、v-for 等)和组件系统,然而,Vue 的真正魅力在于其高度可扩展的设计。你可以通过创建 自定义指…

九、Spring Boot集成Spring Security之授权概述

文章目录 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口前言一、授权概述二、用户权限三、用户授权流程三、Spring Security授权方式1、请求级别授权2、方法级别授权 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口 Spr…

MySQL —— 配置文件

前一篇文章:MySQL —— MySQL 程序-CSDN博客 目录 前言 一、使用方法 二、配置文件位置及加载顺序 1.在 Windows 系统中读取配置文件 2.在 Linux 系统中读取配置文件 三、配置文件语法 四、案例:设置客户端全局编码格式 总结 前言 本篇文章要介…