Innodb之redo日志

2024-04-16 21:28
文章标签 日志 innodb redo

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

Innodb引擎执行流程
在这里插入图片描述

redo log

​ MySQL中的redo log(重做日志)是实现WAL(预写式日志)技术的关键组件,用于确保事务的持久性和数据库的crash-safe能力。借用《孔乙己》中酒店掌柜使用粉板记录赊账的故事,可以形象地解释redo log的工作原理和其在MySQL中的作用。

工作原理
  • 粉板(redo log)

​ MySQL中的redo log充当了酒店掌柜的粉板角色。当有数据更新操作时,InnoDB引擎首先将这些变更写入到redo log中,并同时更新内存。这一步完成后,更新操作即视为完成。这个过程非常快,因为写入redo log通常比直接更新磁盘上的数据要快得多。

  • 账本(磁盘数据文件)

​ 与掌柜的账本类似,MySQL中的磁盘数据文件存储了数据库的持久状态。在系统空闲时,或者当redo log快满时,InnoDB会将redo log中记录的变更同步到磁盘上的数据文件中,确保数据的持久化。

  • WAL技术

​ 即Write-Ahead Logging,其核心思想是先记录日志(即先写redo log),再将数据持久化到磁盘上。这样做的好处是提高了数据更新的效率,并且通过redo log可以在数据库异常重启后恢复未持久化的数据变更,保证数据的完整性。

循环使用

在这里插入图片描述

  • redo log空间是固定的,由一组文件组成。例如,可以配置为4个文件,每个1GB,总共可以记录4GB的操作。
  • 写入位置(write pos)标记了当前记录的位置,随着数据的不断写入而向后移动。当到达redo log末尾时,会循环回到开头继续写。
  • 擦除位置(checkpoint)标记了当前需要从redo log同步到磁盘数据文件的位置。在擦除记录之前,必须确保数据已经持久化到磁盘。
  • 当write pos追上checkpoint时,表示redo log已满。此时,必须暂停新的更新操作,将部分redo log记录持久化到磁盘数据文件中,以腾出空间。
重要性
  • 提高效率

​ 通过先写日志再写磁盘的方式,大大提高了更新操作的效率。

  • crash-safe能力

​ 有了redo log,InnoDB能够保证即使数据库发生异常重启,之前已提交的事务不会丢失,从而保障了数据的完整性和一致性。

redo log buffer

​ 这个缓冲区位于内存中,其主要作用是临时存储即将被写入到redo log文件的日志信息。使用缓冲区的目的是为了提高系统的性能和效率。

工作原理
  1. 写入流程

​ 当事务执行数据修改操作时,这些变更首先被记录到redo log buffer中。这允许事务快速继续执行,而不必等待数据被写入磁盘上的物理redo log文件。

  1. 异步刷新

​ 随后,在适当的时候(比如事务提交时或者当redo log buffer满时),InnoDB存储引擎会将缓冲区中的日志信息异步刷新到磁盘上的redo log文件。这个刷新操作是自动进行的,并且是在后台执行,从而最小化对数据库性能的影响。

  1. crash-safe保证

​ 通过redo log buffer和redo log文件的配合使用,InnoDB能够保证即使在数据库系统崩溃的情况下,所有已提交的事务修改都不会丢失,实现了数据库的crash-safe能力。

重要性
  • 性能提升

​ 使用redo log buffer允许InnoDB合并多个日志写入操作,减少磁盘I/O次数,从而显著提高了数据库操作的性能。

  • 数据安全

​ 尽管redo log buffer位于内存中,但InnoDB通过两阶段提交协议(先写日志后写数据)确保了数据的一致性和持久性,即使发生系统崩溃也能保证数据不丢失。

总结

​ redo log buffer是InnoDB存储引擎中关键的组成部分,它通过缓冲和优化日志写入操作,既提升了数据库的性能,又确保了数据的安全性和一致性。

redo log与binlog

​ 在MySQL数据库中,binlog(二进制日志)和redo log(重做日志)都是关键的日志系统,但它们服务于不同的目的,具有不同的特性和工作机制。

redo log
  • 主要用途

​ redo log主要用于确保事务的持久性和数据库的crash-safe能力。它是InnoDB存储引擎特有的日志系统,用于记录对数据库进行更改的操作,以便在数据库发生崩溃时能够恢复数据。

  • 工作方式

​ redo log采用循环写的方式,固定大小。当空间满时,旧的日志会被新的日志覆盖。redo log记录的是物理日志,即具体修改了哪些数据页。

  • 写入时机

​ 在事务提交时,相关的redo log必须先写入磁盘(这是实现WAL机制的一部分),确保即使系统崩溃,事务的更改也不会丢失。

binlog
  • 主要用途

​ binlog是MySQL服务器层的日志,记录了所有修改了数据库数据的操作(如INSERT、UPDATE、DELETE等),不仅限于InnoDB引擎。binlog主要用于数据复制和数据恢复。

  • 工作方式

​ binlog是追加写的,可以包含多个文件,当一个文件达到一定大小后,会自动切换到新的文件。binlog记录的是逻辑日志,即记录了哪些SQL语句被执行了。

  • 写入时机

​ 事务提交后,相关操作会被写入binlog。在主从复制环境中,从库利用binlog来复制主库上的数据变更,实现数据的同步。

主要区别
  1. 目的和用途

​ redo log主要用于恢复事务提交后的数据,保证数据库的crash-safe。binlog用于数据复制和恢复,支持数据库的高可用和数据备份。

  1. 属于哪一层

​ redo log属于InnoDB存储引擎层,仅适用于InnoDB引擎;而binlog属于MySQL的服务器层,适用于所有的存储引擎。

  1. 日志内容

​ redo log是物理日志,记录了数据页的物理变更;binlog是逻辑日志,记录了修改数据库的SQL语句。

  1. 写入方式

​ redo log采用循环写入,空间固定;binlog采用追加写入,可以无限增长,直到磁盘空间被占满。

  1. 对恢复和复制的影响

​ redo log是实现事务的持久性和数据库恢复的关键;binlog是实现数据复制和某些类型的数据恢复(如点时间恢复)的基础。

redo log相关参数

​ 在MySQL的InnoDB存储引擎中,redo log(重做日志)是实现事务持久性和crash-safe能力的关键组成部分。管理和配置redo log涉及几个关键的参数,这些参数影响着数据库的恢复能力和性能。以下是一些重要的redo log相关参数:

innodb_log_buffer_size
  • 描述:这个参数设置了内存中redo log buffer的大小。redo log buffer是用来暂存日志信息的内存缓冲区,在数据被异步刷新到磁盘上的redo log文件之前,会先写入这个缓冲区。
  • 默认值:默认为16MB。
  • 调整建议:如果你的事务涉及大量的写操作,增加这个参数的值可以减少对磁盘的写操作频率,从而提高性能。但是,增加缓冲区大小也意味着在崩溃恢复时可能需要更长的时间。
innodb_log_group_home_dir
  • 描述:定义了redo log文件的存储位置。
  • 默认值:默认为"./",意味着redo log文件存储在数据目录下。
  • 调整建议:在大多数情况下,你可能不需要更改这个参数。但如果需要优化I/O性能,可以考虑将redo log文件存储在不同的磁盘或存储系统上。
innodb_log_files_in_group
  • 描述:设置redo log组中文件的数量。
  • 默认值:默认为2。
  • 调整建议:增加文件数量可以提高redo log的总大小,但过多的文件可能会增加管理的复杂度。通常情况下,默认值已经足够使用。
innodb_log_file_size
  • 描述:定义了每个redo log文件的大小。
  • 默认值:默认为48MB。
  • 调整建议:这是一个重要的性能调优参数。较大的redo log文件可以减少日志的循环写入,对于高负载的数据库系统来说,可能需要增加此值以提高性能。但是,较大的日志文件在恢复时可能也会花费更多时间。

调整这些参数时,需要考虑到系统的整体性能、数据恢复需求以及磁盘空间限制。在生产环境中做出调整前,推荐先在测试环境中评估改动的影响。调整redo log配置可以优化数据库的性能和恢复能力,但同时也需要权衡潜在的风险。

这篇关于Innodb之redo日志的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

InnoDB的多版本一致性读的实现

InnoDB是支持MVCC多版本一致性读的,因此和其他实现了MVCC的系统如Oracle,PostgreSQL一样,读不会阻塞写,写也不会阻塞读。虽然同样是MVCC,各家的实现是不太一样的。Oracle通过在block头部的事务列表,和记录中的锁标志位,加上回滚段,个人认为实现上是最优雅的方式。 而PostgreSQL则更是将多个版本的数据都放在表中,而没有单独的回滚段,导致的一个结果是回滚非

DAY16:什么是慢查询,导致的原因,优化方法 | undo log、redo log、binlog的用处 | MySQL有哪些锁

目录 什么是慢查询,导致的原因,优化方法 undo log、redo log、binlog的用处  MySQL有哪些锁   什么是慢查询,导致的原因,优化方法 数据库查询的执行时间超过指定的超时时间时,就被称为慢查询。 导致的原因: 查询语句比较复杂:查询涉及多个表,包含复杂的连接和子查询,可能导致执行时间较长。查询数据量大:当查询的数据量庞大时,即使查询本身并不复杂,也可能导致

SSM项目使用AOP技术进行日志记录

本步骤只记录完成切面所需的必要代码 本人开发中遇到的问题: 切面一直切不进去,最后发现需要在springMVC的核心配置文件中中开启注解驱动才可以,只在spring的核心配置文件中开启是不会在web项目中生效的。 之后按照下面的代码进行配置,然后前端在访问controller层中的路径时即可观察到日志已经被正常记录到数据库,代码中有部分注释,看不懂的可以参照注释。接下来进入正题 1、导入m

多数据源的事务处理总是打印很多无用的log日志

之前做了一个项目,需要用到多数据源以及事务处理,在使用事务处理,服务器总是打印很多关于事务处理的log日志(com.atomikos.logging.Slf4jLogger),但是我们根本不会用到这些log日志,反而使得查询一些有用的log日志变得困难。那要如何屏蔽这些log日志呢? 之前的项目是提高项目打印log日志的级别,后来觉得这样治标不治本。 现在有一个更好的方法: 我使用的是log

android两种日志获取log4j

android   log4j 加载日志使用方法; 先上图: 有两种方式: 1:直接使用架包 加载(两个都要使用); 架包:android-logging-log4j-1.0.3.jar 、log4j-1.2.15.jar  (说明:也可以使用架包:log4j-1.2.17.jar)  2:对架包输入日志的二次封装使用; 1:直接使用 log4j 日志框架获取日志信息: A:配置 日志 文

MySQL技术内幕_innodb存储引擎

MySQL技术内幕_innodb存储引擎 INNODB innodb中如果表没有主键 表是否由 非空唯一键,有则该字段为主键没有,则自动创建一个6字节大小的指针 innodb存储引擎的所有数据都存储在表空间中,表空间由段,区,页(块)组成。 如果启用了 innodb_file_per_table, 则每张表内的数据可以单独放在一个表空间中即使启用了上面参数,共享表空间也会因为 系统事务信息

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档