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配置可以优化数据库的性能和恢复能力,但同时也需要权衡潜在的风险。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/623531.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序视频下载器

下载高手,让小程序视频下载变得前所未有的简单!专为非编程专业人士设计,该工具免去了繁琐的抓包软件学习过程,无需深入研究Fiddler或Charles的配置。它优化了视频、图片和音频资源的下载,提供直观的操作界面&#xff0…

拉普拉斯金字塔的频谱分析

1. 基本分析 拉普拉斯金字塔分解,主要由以下步骤组成: 对输入图像 L0 进行低通滤波,其中常采用高斯滤波;对低通滤波后的图像进行 1/2 倍率的下采样,这里的下采样通常是指直接取偶行且偶列(以 0 开始计&am…

创建影子用户

文章目录 1.认识影子用户2.创建隐藏账户并加入管理员组3.修改注册表3.删除用户4.添加管理员权限 1.认识影子用户 影子用户通常指的是那些在系统用户列表中不可见,但在某些情况下可以进行操作的用户。在内网渗透过程中,当我们拿到shell时,肯定…

微博百度热搜收集

背景 大家都有使用微博、百度吧,而每天的热搜想必大家也用的不少。微博、百度的热搜有7、8种分类,每个单独查看比较耗费时间,效率极低,大概要花费3,4分钟左右。最近闲来无事,冒出个想法,是不是有…

rmallox勒索病毒#如何防范及处理?

rmallox勒索病毒介绍 rmallox将其特定的“.rmallox”扩展名添加到每个文件的名称中。例如,您命名为“my_dog.jpeg”的照片将被转换为“ my_dog.jpeg.rmallox”,在名为“ 资料.xlsx ”的Excel表格中报告——转换为“ 资料.xlsx.rmallox”,等等…

中医圆运动规律

目录 人体圆运动营气在十二经脉的运行规律子午流注与圆运动升降结合图 人体圆运动 营气在十二经脉的运行规律 营气在脉中,卫气在脉外 这个顺序也是子午流注的顺序 子午流注与圆运动升降结合图

DBA面试总结(Mysql篇)

一、delete与trancate的区别 相同点 1.两者都是删除表中的数据,不删除表结构 不同点 1.delete支持按条件删除,TRUNCATE不支持。 2.delete 删除后自增列不会重置,而TRUNCATE会被重置。 3.delete是逐条删除(速度较慢&#xff09…

OpenBayes 在线教程|张国荣、鲁迅等老照片秒变高清!即刻上手的超火 SUPIR-AI 图像修复教程

小伙伴们,大家在生活中是不是也会遇到这样的烦恼:心心念念想要打印一张充满回忆的老照片或酷炫动漫壁纸,却发现图像糊得像打了马赛克? 市面上的图像修复工具五花八门,选择困难症人群找得快要崩溃? 终于找…

看看《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制山鸢尾萼片长度和萼片宽度的小提琴图

使用MATLAB绘制鸢尾花数据集( fisheriris)中山鸢尾( Iris Setosa)的萼片长度和 萼片宽度的小提琴图。这将帮助我们更好地了解山鸢尾的这两个特征的数据分布情况,包括它们的 中位数、四分位范围及密度估计。这种可视化工…

antDesignVue 使用-持续更新

背景 vue3viteantdesignvuevue-router 1,全局完整注册 1.1下载antdesignvue npm i --save ant-design-vue 或者 npm install ant-design-vuenext --save 1.2在mian.ts中引入 import { createApp } from vue import { createPinia } from piniaimport App from ./App.vue …

ST-LINK Utility 4.6.0 下载安装及使用方法介绍

一、介绍 STM32 ST-LINK Utility是针对STM32全系芯片进行编程(读、写、擦除、选项字)的一款工具。 STM32 ST-LINK Utility软件主要的功能就是量产(批量下载代码的工具)。它也是比较实用的一个工具,当我们需要查看芯片F…

关于用虚拟机安装ubuntu22.04出现的问题,和之前踩过的坑

文章目录 概要如果自己分区虚拟机长时间进不去ubuntu系统建议的分区大小小结 概要 利用虚拟机安装ubuntu的好处是在ubuntu下载的东西不会因为关机而删除 今天心血来潮,想要学习一下把linux系统装到u盘来使用,搜教程但是进行到的时候,出现了错…