MySQL高级-InnoDB引擎-事务日志- redo log(事务持久性的保证)

文章目录

  • 1、redo log
    • 1.1、重做日志缓冲(redo log buffer)
    • 1.2、重做日志文件(redo log file)
  • 2、如果没有redo log,可能会存在什么问题的?
    • 2.2、我们一起来分析一下。
  • 2.2、那么,如何解决上述的问题呢?
  • 2.3、那为什么每一次提交事务,要刷新redo log到磁盘中呢,而不是直接将buffer pool中的脏页刷新到磁盘呢?

1、redo log

  • 重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性
  • 该日志文件由两部分组成:redo log buffer & redo log file 当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘,发生错误时,进行数据恢复使用。

1.1、重做日志缓冲(redo log buffer)

在内存中

1.2、重做日志文件(redo log file)

在磁盘中

2、如果没有redo log,可能会存在什么问题的?

2.2、我们一起来分析一下。

在这里插入图片描述

  • 我们知道,在InnoDB引擎中的内存结构中,主要的内存区域就是缓冲池,在缓冲池中缓存了很多的数据页
  • 当我们在一个事务中,执行多个增删改的操作时,InnoDB引擎会先操作缓冲池中的数据,如果缓冲区没有对应的数据,会通过后台线程将磁盘中的数据加载出来,存放在缓冲区中,然后将缓冲池中的数据修改,修改后的数据页我们称为脏页
  • 而脏页则会在一定的时机,通过后台线程刷新到磁盘中,从而保证缓冲区与磁盘的数据一致。
  • 而缓冲区的脏页数据并不是实时刷新的,而是一段时间之后将缓存区的数据刷新到磁盘中,假如刷新到磁盘的过程出错了,而提示给用户事务成功,而数据却没有持久化下来,这就出现问题了,没有保证事务的持久性。

2.2、那么,如何解决上述的问题呢?

在InnoDB中提供了一份日志 redo log,接下来我们再来分析一下,通过redo log如何解决这个问题。

在这里插入图片描述

  • 有了redo log之后,当对缓冲区的数据进行增删改之后,会首先将操作的数据页的变化,记录在redo log buffer中。
  • 在事务提交时,会将redo log buffer中的数据刷新到redo log磁盘文件中。
  • 过一段时间之后,如果刷新缓冲区的脏页到磁盘时,发生错误,此时就可以借助于 redo log 进行数据恢复,这样就保证了事务的持久性。
  • 而如果脏页成功刷新到磁盘 或 或者 设计到的数据已经落盘,此时redo log就没有作用了,就可以删除了,所以存在的两个redo log文件是循环写的。

2.3、那为什么每一次提交事务,要刷新redo log到磁盘中呢,而不是直接将buffer pool中的脏页刷新到磁盘呢?

  • 因为在业务操作中,我们操作数据一般都是随机读写磁盘的,而不是顺序读写磁盘。
  • 而redo log在往磁盘文件中写入数据,由于是日志文件,所以都是顺序写的。
  • 顺序写的效率,要远大于随机写。
  • 这种先写日志的方式,称之为 WAL(Write-Ahead Logging)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL高级-SQL优化- group by 优化(通过索引来提高效率)

文章目录 0、group by 优化1、删除多余的索引2、查询 group by profession3、执行计划 group by profession4、创建联合索引 idx_user_pro_age_sta5、再次执行计划 group by profession6、执行计划 group by age7、执行计划 group by profession,age8、执行计划 where professi…

2-requests模块(6节课学会爬虫)

2-requests模块(6节课学会爬虫) 1,安装requests2,发送get,post请求,获取响应3,response的方法方法一(Response.text)方法二(response.content.decode()&#…

基于springboot实现学生用品采购系统项目【项目源码+论文说明】

基于springboot实现学生用品采购系统演示 摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装学生用品采购系统软…

《昇思25天学习打卡营第6天|onereal》

Vision Transformer(ViT)简介 近些年,随着基于自注意(Self-Attention)结构的模型的发展,特别是Transformer模型的提出,极大地促进了自然语言处理模型的发展。由于Transformers的计算效率和可扩…

YOLOv10(7):YOLOv10训练(以训练VOC数据集为例)

YOLOv10(1):初探,训练自己的数据_yolov10 训练-CSDN博客 YOLOv10(2):网络结构及其检测模型代码部分阅读_yolov10网络结构图-CSDN博客 YOLOv10(4):损失&…

MapReduce学习

目录 7.3 MapReduce工作流程 7.3.1 工作流程概述 7.3.2 MapReduce各个执行阶段 7.3.3 Shuffle过程详解 1. Shuffle过程简介(过程分为Map端的操作和Reduce端的操作) 2、Map端的Shuffle过程: 3、在Reduce端的Shuffle过程 7.4 实例分析&am…

mysql是什么

mysql是什么 是DBMS软件系统,并不是一个数据库,管理数据库 DBMS相当于用户和数据库之间的桥梁,有超过300种不同的dbms系统 mysql是关系型数据库,关系型数据库存储模型很想excel,用行和列组织数据 sql是一门编程语言…

LUA 语言中subtree 的使用教程

在线编辑器: https://www.runoob.com/try/runcode.php?filenameHelloWorld&typelua 在Lua语言中,"subtree"通常指的是一个子表或者子树,它指的是一个Lua表(table)中的一个部分,可以是一个单…

自定义注解+AOP形式监控接口调用日志

目的&#xff1a; 通过自定义注解&#xff0c;在需要监控接口调用输出日志的类或方法上&#xff0c;加上自定义注解&#xff0c;实现无侵入式接口监控。 实现&#xff1a; idea结构 1、导入pom <dependency><groupId>org.aspectj</groupId><artifactI…

你的 Python 代码太慢了吗?协程和多线程来拯救!

目录 协程&#xff08;Coroutine&#xff09; 多线程&#xff08;Multithreading&#xff09; 协程与多线程的原理 协程的原理 多线程的原理 实践案例 使用协程案例 使用多线程案例 大家好&#xff0c;在Python编程中&#xff0c;处理并发任务时&#xff0c;我们经常会…

LLM大模型:如何选择合适的 Embedding 模型?

检索增强生成&#xff08;RAG&#xff09;是生成式 AI &#xff08;GenAI&#xff09;中的一类应用&#xff0c;支持使用自己的数据来增强 LLM 模型&#xff08;如 ChatGPT&#xff09;的知识。 RAG 通常会用到三种不的AI模型&#xff0c;即 Embedding 模型、Rerankear模型以及…

数据质量管理-时效性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档&#xff0c;当前数据质量评价指标框架中包含6评价指标&#xff0c;在实际的数据治理过程中&#xff0c;存在一个关联性指标。7个指标中存在4个定性指标&#xff0c;3个定量指标&#xff1b; 定性指标&am…

视频号视频怎么保存到手机,视频号视频怎么保存到手机相册里,苹果手机电脑都可以用

随着数字媒体的蓬勃发展&#xff0c;视频已成为我们日常生活中不可或缺的一部分。视频号作为众多视频分享平台中的一员&#xff0c;吸引了大量用户上传和分享各类精彩视频。然而&#xff0c;有时我们可能希望将视频号上的视频下载下来,以下将详细介绍如何将视频号的视频。 方法…

[DASP]玩机!在组织一套音频系统之前,我们先要知道这套系统里面有什么东西。

前言 现在不是搞音频嘛&#xff0c;正好自己买了无源音箱&#xff0c;买了套DSP芯片玩一下 流程 上图是我们组织一套音频系统的流程&#xff0c;首先我们需要知道各个元件是做什么的 1. 音源&#xff08;例如麦克风、音乐播放器等&#xff09;&#xff1a; 产生模拟音频信号…

无忧易售新功能:一键白底转换,升级产品图片质感

在电商领域不断追求卓越与效率的今天&#xff0c;无忧易售ERP推出一键白底转换功能&#xff0c;为卖家们提供前所未有的便捷与高效&#xff0c;改变了商品图片处理的传统模式&#xff0c;革新了卖家们的图片处理体验&#xff0c;让商品展示焕然一新&#xff0c;助力商家在激烈的…

Java--常用类APl(复习总结)

前言: Java是一种强大而灵活的编程语言&#xff0c;具有广泛的应用范围&#xff0c;从桌面应用程序到企业级应用程序都能够使用Java进行开发。在Java的编程过程中&#xff0c;使用标准类库是非常重要的&#xff0c;因为标准类库提供了丰富的类和API&#xff0c;可以简化开发过…

Softmax函数的作用

Softmax 函数主要用于多类别分类问题&#xff0c;它将输入的数值转换为概率分布。 具体来说&#xff0c;对于给定的输入向量 x [x_1, x_2,..., x_n] &#xff0c;Softmax 函数的输出为 y [y_1, y_2,..., y_n] &#xff0c;其中&#xff1a; 这样&#xff0c;Softmax 函数的输…

python selenium 打开网页

selenium工具类 - 文件名 seleniumkit.py 代码如下 # -*- coding:utf-8 _*-from selenium import webdriverimport os import timefrom selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from seleniu…

【Linux】解锁并发:多线程同步技术详解与应用实践

文章目录 前言&#xff1a;1. 同步概念2. 条件变量&#xff1a;实现线程间同步的&#xff01;2.1. 条件变量是什么&#xff1f;2.2. 认识条件变量接口 3. 写一个测试代码——验证线程的同步机制4. 生产消费模型5. 生产消费模型 条件变量6. 线程池7. 可重入 VS 线程安全7.1. 概…

ModuleNotFoundError: No module named ‘_sysconfigdata_x86_64_conda_linux_gnu‘

ModuleNotFoundError: No module named _sysconfigdata_x86_64_conda_linux_gnu 1.软件环境⚙️2.问题描述&#x1f50d;3.解决方法&#x1f421;4.结果预览&#x1f914; 1.软件环境⚙️ Ubuntu 20.04 Python 3.7.0 2.问题描述&#x1f50d; 今天发现更新conda之后&#xff0…