redolog和undolog

2023-10-28 17:44
文章标签 redolog undolog

本文主要是介绍redolog和undolog,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、什么是redolog

redolog是基于InnoDB存储引擎下的日志文件,也叫重做日志。用于记录数据页的物理变化,记录数据修改后的值。无论事务是否成功提交都会产生记录。当mysql产生故障,可以采用redolog日志恢复数据,同时redolog日志是顺序写入磁盘,也就是顺序IO,刷盘速率快。MYSQL事务的持久性就体现在这一方面。

redolog包括两部分,一是redolog buff(内存中的日志缓冲区),一是redolog file(日志文件)。MYSQL执行一次DML语句,会先将记录写入redlog buff中,后在某一个时间点再一次性将这些记录写入redolog file。也就是WAL(Write-Ahead Logging)技术(先写日志后刷盘)

二、为什么需要redolog

简单来讲,redolog保证了事务的持久性。InnoDB引擎下,数据的读写操作都是在从磁盘文件(idb文件)中一次性拷贝一页的数据到buff pool中。事务提交后buff pool不会立即刷盘(因为InnoDB是以页为单位与磁盘进行交互的,一个事务可能只修改了一页上的几个字节,此时如果将整页数据进行刷盘太浪费资源。二是因为一个事务涉及到的数据可能存放在多个数据页上,彼此并不连续。也就是会产生随机IO,随机IO需要进行磁盘的磁头寻道等操作会消耗更多随机成本)

所以需要引入redolog,任意事务对任意页进行的修改都会记录在redolog里,在事务提交后,我们只需要保证redolog成功落盘即可,同时redolog是追加写操作,也就是顺序IO,落盘时时间成本低。即使mysql宕机了,我们也可以通过redolog恢复数据。

三、undolog

undolog用来实现事务四大特性中有一个是原子性,原子性是指对数据库的一系列操作,要么全部成功,要么全部失败,不可能出现部分成功的情况。

undo log主要记录数据的逻辑变化,比如一条INSERT语句对应一掉DELETE的undo log,一个UPDATE语句对应一条相反的undo log,这样在发生错误的时候,可以使事务回滚到之前的数据状态。

 

 

 


 

这篇关于redolog和undolog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/294884

相关文章

MySQL日志——redolog

redo log(重做日志) 为什么需要redo log? 在mysql提交一个事务后,这个事务所作的数据修改并不会直接保存到磁盘文件中,而是先保存在buffer pool缓冲区中,在需要读取数据时,先从缓冲区中找,没找到再去磁盘找,加之每次提交事务都将数据写入磁盘的效率低下,所以引入了buffer pool缓冲区 也正是因为一个事务的提交并不会立即由磁盘进行持久化,此时mysql故障就会有

binlog和redolog有什么区别

在数据库管理系统中,binlog(binary log)和 redolog(redo log)是两种重要的日志机制,它们在数据持久性和故障恢复方面扮演着关键角色。虽然它们都用于记录数据库的变化,但它们的目的和使用方式有所不同。下面详细解释它们之间的区别: Binlog(Binary Log) 1. 主要功能: 数据复制和同步:binlog 主要用于主从复制(replication),使得从库

MySQL事务中的BinLog与redolog与undolog

文章目录 1.redo log2.undo log3.binlog和事务日志的先后顺序及group commit4.总结 1.redo log redo log和二进制日志的区别 redo log不是二进制日志。 虽然二进制日志中也记录了innodb表的很多操作,也能实现重做的功能,但是它们之间有很大区别。二进制日志是在存储引擎的上层产生的,不管是什么存储引擎,对数据库进行的

mysql undolog管理

在MySQL中,Undo Log(撤销日志)用于支持事务的回滚和MVCC(多版本并发控制)。为了避免Undo Log不断增长,影响系统性能,需要进行合理的清理。MySQL的Undo Log清理策略主要依赖于系统的配置参数和后台线程的操作。以下是MySQL中有关Undo Log清理策略及相关配置参数的详细说明: undolog配置 Undo Log 清理策略 MySQL会自动管理Undo Lo

RedoLog和Checkpointnotcomplete

原 Redo Log 和Checkpoint not completehttps://blog.csdn.net/tianlesoftware/article/details/4908066版权声明: https://blog.csdn.net/tianlesoftware/article/details/4908066     首先我们来看下 alertSID.log 日志:   Mon Nov

如何解析MySQL中的redolog日志?

解析MySQL中的redolog日志比解析binlog更为复杂,因为redolog是InnoDB存储引擎特有的,以物理格式记录数据库的更改,主要用于恢复未提交的事务和加速数据恢复。由于其物理和二进制的特性,redolog没有直接可读的SQL语句或简单的解析工具如mysqlbinlog。 然而,有一些高级的方法和工具可以间接地帮助你理解redolog的内容: 1. InnoDB的Crash Re

【云原生进阶之数据库技术】第一章MySQL-架构原理-3.2.4 UndoLog工作原理

1 基本概念 undo log(回滚日志) :是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC。 redo log(重做日志) :是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复; binlog (归档日志) :是 Server 层生成的日志,主要用于数据备份和主从复制;         先来看一张sq

Innodb下修改事务工作流程(buffer pool、redo log、undolog)

1、在Buffer Pool中读取数据:当InnoDB需要更新一条记录时,首先会在Buffer Pool中查找该记录是否在内存中。如果没有在内存中,则从磁盘读取该页到Buffer Pool中。 2、记录UndoLog:在修改操作前,InnoDB会在Undo Log中记录修改前的数据。Undo Log是用来保证事务原子性和一致性的一种机制,用于在发生事务回滚等情况时,将修改操作回滚到修改前的状态,

使用logminer做redolog的分析(做在线日志分析)

1、 数据库的参数文件中做以下设置参数添加 添加参数: log_archive_start=true log_archive_format=%S.arc log_archive_dest=/home/oracle/arch UTL_FILE_DIR=/u02/oralog 写入到spfile中: SQL> create spfile from pfile='/home/

数据库中的binlog、redolog、undolog的区别

binlog二进制日志是mysql-server层的,主要是做主从复制,时间点恢复使用 redo log重做日志是InnoDB存储引擎层的,用来保证事务安全 undo log回滚日志保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读。select如果没有特定加锁的话就是快照读,用到了undolog,而insert delete和updat