首页 > 其他分享 >InnoDB中的redo log和undo log机制

InnoDB中的redo log和undo log机制

时间:2024-09-15 19:51:43浏览次数:3  
标签:事务 log 数据库 Undo InnoDB redo Log

1.redo log:

Redo Log 是数据库系统(尤其是 MySQL 的 InnoDB 存储引擎)中用于实现事务持久性的重要机制。它记录了事务对数据库所做的修改,确保即使数据库发生崩溃,事务的提交仍然不会丢失。

Redo Log 的工作原理:

  1. 事务开始:
    当事务执行开始时,任何对数据的修改都会先写入 redo log,而不是直接写入磁盘中的数据页。

  2. 写入内存:
    修改的数据首先会写入内存中的缓冲池,并在内存中更新数据页,同时记录这次修改的操作到 redo log 缓冲区中。

  3. 写入磁盘:事务提交时,InnoDB 会将 redo log 缓冲区的内容持久化到磁盘中的 redo log 文件中(即“预写日志”原则,WAL,Write-Ahead Logging),确保即使系统崩溃,仍可以通过 redo log 恢复事务。

  4. 数据刷入磁盘:数据页的实际刷盘操作(即将内存中的数据页持久化到磁盘)并不需要立刻完成,数据库可以延迟将数据刷入磁盘。这意味着 redo log 能够保证数据的完整性,即使数据页还没有完全写入磁盘。

  5. 崩溃恢复:如果数据库发生故障,InnoDB 会在重启时通过 redo log 进行崩溃恢复。它会根据 redo log 的内容,重做所有已提交但尚未写入磁盘的数据修改,确保数据的一致性。

Redo Log 的特性:

  • 循环写:InnoDB 使用的是固定大小的 redo log 文件,它们组成一个循环日志(circular log)。当写满后,会回头覆盖最早的日志。
  • 持久性保证:通过 redo log 机制,即使数据库出现崩溃,已提交的事务也能在重启时得到恢复。
  • 效率提升:因为 redo log 是顺序写入的操作,相比随机写磁盘效率更高。

Redo Log 与 Binlog 的区别:

  • Redo Log:由存储引擎(如 InnoDB)生成,记录数据的物理修改,用于崩溃恢复。
  • Binlog:由 MySQL Server 生成,记录逻辑 SQL 操作,用于主从复制和数据库恢复。
    通过 redo log,数据库能够实现事务的持久性(Durability),即使在意外中断或崩溃的情况下,已提交的事务仍能被恢复。

2.undo log:

Undo Log 是数据库系统(如 MySQL 的 InnoDB 存储引擎)中用于实现事务回滚和**多版本并发控制(MVCC)**的重要机制。它记录了事务在执行过程中所做的修改之前的数据快照,从而支持事务的回滚以及提供一致的读视图。

Undo Log 的工作原理:

  1. 事务开始:当事务修改数据时,InnoDB 会将修改前的旧数据(即原始数据)记录到 Undo Log 中,以便在事务回滚时恢复原始状态。

  2. 回滚操作:如果事务执行过程中发生错误或主动执行回滚操作,数据库会使用 Undo Log 将数据恢复到修改前的状态,从而撤销事务对数据库的影响。

  3. 多版本并发控制(MVCC):在并发控制中,未提交的事务会对数据进行修改,而其他事务需要读取一致的数据快照。在这种情况下,数据库可以通过 Undo Log 提供修改前的数据版本,从而实现快照读,避免读取到未提交的数据。这样,事务可以在不加锁的情况下,读到一致性视图的数据。

Undo Log 的特性:

  • 用于回滚:Undo Log 保存的是事务修改前的旧值,因此可以在回滚时使用这些旧值恢复数据库原来的状态。无论事务是主动回滚还是由于系统故障引发的回滚,Undo Log 都能确保数据恢复到事务之前的状态。

  • 支持 MVCC:多版本并发控制(MVCC)依赖 Undo Log 机制来维护多个数据版本。通过 Undo Log,数据库可以为不同的事务提供不同的历史版本数据,从而实现非阻塞读操作。

  • 存储方式:Undo Log 记录的数据并不会直接存储在独立的文件中,而是存放在系统表空间(System Tablespace)或者独立的 undo 表空间中。

  • 删除延迟:当事务修改数据并提交时,这些修改可能会覆盖旧数据。然而,数据库并不会立即删除 Undo Log,特别是在有其他事务依赖这些旧版本数据时。只有当没有事务需要使用旧版本数据时,Undo Log 才会被回收。

Undo Log 与 Redo Log 的区别:

  • Undo Log:记录的是事务修改之前的数据,用于支持事务回滚和 MVCC。
  • Redo Log:记录的是事务修改后的数据,用于崩溃恢复和持久化。

Undo Log 的作用:

  1. 回滚事务:当事务发生错误或中断时,Undo Log 用于撤销事务的所有修改,确保数据库的一致性。

  2. 快照读(Snapshot Read):在 MVCC 中,数据库使用 Undo Log 提供历史数据的快照,确保读操作不受其他未提交事务的影响,实现一致性读。

总之,Undo Log 在数据库中主要用于提供事务的回滚能力和支持一致性读,尤其在并发场景下,通过 Undo Log 保持数据的多个版本,使得事务在读写时能够相互独立,提高了并发性能。

标签:事务,log,数据库,Undo,InnoDB,redo,Log
From: https://blog.csdn.net/m0_73163793/article/details/142050573

相关文章

  • 帝国cms和zblog哪个好
    帝国CMS(EmpireCMS)和Z-Blog是两种不同的内容管理系统(CMS),它们各自有着不同的特点和适用场景。选择哪一个更好,主要取决于你的具体需求、技术水平以及网站的发展规划。以下是帝国CMS和Z-Blog的一些对比:帝国CMS(EmpireCMS)适用范围:帝国CMS适用于中大型网站的数据管理,尤其是那......
  • 深入理解 Write-Ahead Logging (WAL) 及其应用
    在讨论数据库原理的时候,我们经常会听到一种技术-Write-AheadLogging(WAL),它保证了数据的持久性和一致性。WAL的基本思想非常简单,但它的应用范围非常广泛,从数据库到分布式系统,再到各种现代应用的开发中,都能看到它的影子。本文将深入剖析WAL的基本机制,并探讨其在不同应用场......
  • InnoDB索引与底层原理
    InnoDB索引与底层原理索引介绍索引:一颗B+树,除了叶子节点外,其余的节点都作为目录项,且都是有序排列的在目录项page里面,一条记录对应着下层的一个page一条记录至少有两个列:列1作为主键记录该page最小的主键值;列2记录该page的页号在叶子节点才真正地存放数据聚簇索引:以......
  • ITD102: Computer Technology Fundamentals
    ITD102:ComputerTechnologyFundamentalsWorkbook2:HighLevelTechnologiesThisdocumentcontainsthe practicalexercises questionsrelevanttothesecondpartofthisunit.RaspberryPi:AllstudentsneedaRaspberryPi.Thereisnotextbooktopurchas......
  • SEGGER_RTT配合EasyLogger进行日志输出
    1.什么是日志?日志(Logging)是一种记录程序运行时发生的事件、状态变化、错误消息或其他重要信息的方法。它对于开发者来说是一个宝贵的工具,用于调试程序、监控运行时行为以及诊断问题。我们之前printf输出信息就是最简单、常用的一种日志形式2.什么是RTT全称为RealTimeTrans......
  • log4net
    1,AssemblyInfo.cs中加入[assembly:log4net.Config.XmlConfigurator(ConfigFile="log4net.config",ConfigFileExtension="config",Watch=true)]2,log4net.config文件 <log4net><!--错误日志类--><loggername="logerror......
  • MySQL存储引擎:InnoDB与MyISAM
    InnoDB和MyISAM是MySQL数据库中两种常用的存储引擎,它们在数据存储结构、事务支持、锁的支持、外键支持、性能等方面存在显著的差异。下面将详细介绍这两种存储引擎的特点和优势。什么是存储引擎​MySQL中的数据用各种不同的技术存储在文件(或者内存)中。每一种技术都使......
  • MySQL 误操作 误修改 binlog 还原恢复实战 超详细
    硬盘有价,数据无价,数据库执行,谨慎操作!binlog日志还原不适用于直接删表删库的误操作!目录实战恢复1、导出相关时间binlog数据2、找到对应语句以及pos区间3、导出改动区间的sql4、将binlog导出的sql转换为逆向修复sql        1、从上面binlog日志可以看出  开头......
  • 【YashanDB知识库】archivelog磁盘满导致数据库abnormal
    本文转自YashanDB官网,具体内容可见[https://www.yashandb.com/newsinfo/7352661.html?templateId=1718516]【问题分类】功能使用【关键字】磁盘空间满,archivelog日志,archivelog自动清理【问题描述】数据库状态变更为abnormal,检查V$DIAG_INCIDENT视图,发现提示信息为archive日志无法......
  • 【YashanDB知识库】archivelog磁盘满导致数据库abnormal
    本文转自YashanDB官网,具体内容可见[https://www.yashandb.com/newsinfo/7352661.html?templateId=1718516]【问题分类】功能使用【关键字】磁盘空间满,archivelog日志,archivelog自动清理【问题描述】数据库状态变更为abnormal,检查V$DIAG_INCIDENT视图,发现提示信息为archive日志......