一、undo log、Buffer Pool、WAL、redo log

news2024/9/20 12:36:49

目录

  • 1、undo log
  • 2、Buffer Pool
  • 3、WAL
  • 4、redo log
  • 5、总结
  • 6、问题

1、undo log

  • undo log日志是一种用于撤销回退的逻辑日志,在事务未提交前会记录相反的操作到undo log,当事务回滚,使用undo log 进行回滚,保证了事务的原子性。
  • MVCC通过 undo log+ReadView实现,undo log为每条记录保存多份历史数据,Mysql根据ReadView里的信息顺着undo log记录的版本链找到相关记录。
    在这里插入图片描述

2、Buffer Pool

Buffer Pool是Innodb引擎将磁盘的数据页缓存到内存中的一片区域

  • 当读取数据时,如果数据在Buffer Pool中,直接读取,否则去磁盘读,然后缓存到Buffer Pool中
  • 当修改数据时,会直接修改在Buffer Pool中的数据,并将数据所在页设置为脏页,后台由另一个线程将脏页写入磁盘。
  • Buffer Pool中除了缓存数据页,还缓存了undo页,undo log日志首先写入undo页,undo页和数据页一样由redo log来记录,然后通过redo log落盘

3、WAL

  • 全称write-ahead-loggin,指的是MySQL的写不是先写磁盘,而是先写日志,后续在合适时间再写磁盘,buffer pool和redo log的设计就是WAL技术
    在这里插入图片描述

4、redo log

  • 由于buffer pool是存储在内存,所以会有丢失风险,因此需要对在buffer pool中修改的数据记录到redo log中,事务提交后,redo log日志落盘,保证了事务的持久性
  • redo log是物理日志,记录了对某个数据页做了什么修改,比如对A表的B数据页C偏移量的地方做了D更新。
  • 同样redo log也有自己的缓存区,即redo log buffer,写日志前先写buffer,后续在以下情况下落盘:
    1、MySQL正常关闭
    2、redo log buffer写入量大于其空间一半
    3、后台线程每隔一秒落盘
    4、事务提交时由innodb_flush_log_at_trx_commit参数控制:0时不落盘,1时落盘,2时写到操作系统文件缓存,后续由操作系统落盘。因此性能比较为0>2>1;安全性比较为1>2>0;

5、总结

  • undo log用做事务回滚,记录了事务更新前的数据,保证事务的原子性,同时也用于实现MVCC
  • redo log用做重做数据,记录了事务更新后的数据,保证事务的持久性。通过自己的redo log buffer来缓存日志并按一定规则进行落盘操作。
  • Buffer Pool用做缓存数据页,如果涉及数据更新,则直接对缓存数据数据页做更新,更新后的数据页称为脏页,脏页由后台线程落盘

6、问题

  1. 如果在事务执行过程中(未提交)宕机,MySQL如何处理?
    答:如果在事务执行过程中宕机,由于事务没有提交,buffer pool里的数据也未落盘,因此执行过程中的修改其实无效,MySQL无需处理
  2. 如果在事务提交后宕机,MySQL如何处理?
    答:事务提交时,Innodb 会将记录写到redo log buffer中。事务提交后,会根据innodb_flush_log_at_trx_commit参数决定是否落盘,即0:不落盘,1:落盘,2:写入文件缓存,由操作系统落盘。如果设置为0,则会发生数据丢失;如果设置为1,在落盘过程中宕机也会发生丢失;如果设置为2,机器宕机会丢失,MySQL挂了不会丢失。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang 深入理解 GC

垃圾是指程序向堆栈申请的内存空间,随着程序的运行已经不再使用这些内存空间,这时如果不释放他们就会造成垃圾也就是内存泄漏。 垃圾回收 (Garbage Collection,GC) 是编程语言中提供的自动的内存管理机制,自动释放不需要的内存对象…

【Qt】Qt系统 | Qt事件 | 定时器

文章目录 定时器QTimerEventQTimer获取系统日期及时间 定时器 Qt 中在进行窗口程序的处理过程中,经常要周期性的执行某些动作,或者制作一些动画效果,使用定时器可以实现这些需求。 定时器,会在间隔一定时间后,执行某一…

八岁编程小天才:45分钟挑战AI极限,聊天机器人一鸣惊人

一位8岁的小女孩,用短短45分钟就搭建出了一个聊天机器人,吸引了180万人的在线围观。 Cursor,这款被Cloudflare副总裁家8岁女儿青睐的AI代码编辑器,成为全网热议的焦点。 甚至许多网友出来发话力挺。 AI编程,从复杂到简…

swagger,Knife4j和Yapi

目录 swagger swagger的作用 swagger的使用 一.导入依赖 二.创建swagger配置类,交给SpringIoC容器管理 三.使用swagger依赖的注解来给接口层(controller)的各种方法进行注释 Api ApiOperation ApiImplicitParam ApiModel ApiModelProperty 四:…

【layUI】点击导出按钮,导出excel文件

要实现的功能如下&#xff1a;根据执行状态判断是否可以导出。如果可以导出&#xff0c;点击导出&#xff0c;在浏览器里下载对应的文件。 代码实现 html里&#xff1a; <table class"layui-hide" id"studentTable" lay-filter"studentTable&…

vue2表单校验:添加自定义el-form表单校验规则

前言 在vue2表单校验&#xff1a;el-form表单绑定数组并使用rules进行校验_vue2 rules校验-CSDN博客中&#xff0c;使用form原生的rules对表单中每个控件的必填、格式等做了校验。但是保存时&#xff0c;除了验证每一个控件的输入合乎要求外&#xff0c;还需要验证控件之间的数…

八、DMA直接存储器存取

1、DMA简介 DMA是一个数据转运小助手&#xff0c;用来协助CPU完成转运的工作 2、存储器映像 计算机系统的5大组成部分&#xff1a;运算器、控制器、存储器、输入设备、输出设备 运算器和控制器&#xff0c;合称CPU 计算机的核心关键部分是CPU和存储器 存储器涉及&#xff…

带你深入浅出新面经:十五、十大排序之堆排序

此为面经第十五谈&#xff01;关注我&#xff0c;每日带你深入浅出一个新面经。 我们要了解面经要如何“说”&#xff01; 很重要&#xff01;很重要&#xff01;很重要&#xff01; 我们通常采取总-分-总方式来阐述&#xff01;&#xff08;有些知识点&#xff0c;你可以去…

Linux--find命令-搜索

find 命令 用来在指定目录下查找文件 如果使用该命令时&#xff0c;不设置任何参数&#xff0c;则find命令将在当前目录下查找子目录与文件&#xff0c;并且将查找到的子目录和文件全部进行显示 find <指定目录> <指定条件> <指定动作> 默认是搜索当前目录…

C语言:编程世界的基石

在计算机科学的世界里&#xff0c;C语言就像一座坚固的桥梁&#xff0c;连接着硬件和软件的两端。自从20世纪70年代诞生以来&#xff0c;C语言以其简洁、高效和强大的特性&#xff0c;成为了编程领域的经典之作。本文将探讨C语言在不同工作领域中的应用&#xff0c;以及它为何能…

opensatck上windows云主机上java服务的端口调用问题处理

文章目录 前言一、思路二、解决步骤1.将安全组规则全部放开2.云主机内部防火墙关闭3.尝试telnet4.查看代码&#xff0c;修改IP配置 总结 前言 opensatck上windows云主机上java服务的端口调用问题处理。同事在window10的云主机中用idea起了调试中的服务&#xff0c;端口在8000&…

鸿蒙操作系统为前端开发者带来下一个风口

在科技飞速发展的当下&#xff0c;前端开发领域也在不断寻求新的突破和机遇。而鸿蒙操作系统的崛起&#xff0c;无疑为前端开发者带来了下一个令人瞩目的风口。 一、鸿蒙系统的独特优势 1. 分布式架构 鸿蒙系统的分布式架构打破了传统设备之间的界限&#xff0c;使得不同设备可…

了解如何使用 Google 的 Gemini-1.5-pro 最新模型开发用于卡路里计算的生成式 AI 应用

欢迎来到雲闪世界。 例如&#xff0c;你有没有想过&#xff0c;当你吃晚餐时&#xff0c;你摄入了多少卡路里&#xff1f;我经常这样做。如果你能简单地通过应用程序发送一张你的盘子照片&#xff0c;并在你决定要吃多少之前得到卡路里总量的估计值&#xff0c;那不是很棒吗&am…

springboot依赖之JDBC(二)

要在 IntelliJ IDEA 中创建一个 Spring Boot 项目并实现基于 JdbcTemplate 的增删改查功能&#xff0c;以下是一个详细的步骤和代码示例。这个例子使用一个简单的用户信息表&#xff08;users&#xff09;&#xff0c;并展示如何使用 JdbcTemplate 的各种方法进行操作。 前文有…

【Linux —— 生产者消费者模型】

Linux —— 生产者消费者模型 生产者消费者模型概述生产者消费者模型特点生产者消费者模型优点基于BlockingQueue的生产者消费者模型 生产者消费者模型概述 生产者消费者模型是一种并发编程模型,用于解决多线程或多进程间的数据共享和同步问题。在这个模型中,有两种角色:生产者…

Python 3.11 从入门到实战1(环境准备)

本篇文章是python3.11的学习开篇&#xff0c;我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;获得python基础学习与实例、实践相结合&#xff0c;使我们完全掌握python。并做到独立完成项目开发的能力。 今天的谈论的比较简单&#xff0c;也是后续学习的基础。pyt…

深入MySQL

MySQL逻辑架构 MySQL逻辑架构整体分为三层&#xff0c;顶层客户端并非MySQL独有&#xff0c;如&#xff1a;连接处理、授权认证、安全等功能都在客户端层。 核心服务层&#xff0c;MySQL大多数核心服务都在这一层&#xff0c;包括查询解析、分析、优化、缓存、内置函数等。所有…

Python中csv文件的操作5

在《Python中csv文件的操作1》中提到&#xff0c;可以通过read()和write()方法读取和写入csv文件中的所有内容。除了上述的两个方法外&#xff0c;还可以通过readline()、readlines()、writelines()实现csv文件的读写操作。 1 readline()方法 readline()方法每次只读取文件的…

入行「游戏策划」,该从何处下手?

想知道策划岗位该怎么入行可点击蓝链 相比较起以技术为最重要评判标准的开发岗&#xff0c; 「游戏策划」这一岗位在非业界人士的眼中 一直都是一个风评方差很大的岗位。 有人说策划岗又轻松又威风&#xff0c; 只需要输出想法&#xff0c;落地都交给开发&#xff0c; 干…

xss-labs 11-15关通关攻略

第11关 一.进入11关 二.进行抓包 在抓到的数据包中加入Referer:"οnclick"alert(1)"type"text 第12关 进入第12关发现没有注入点&#xff0c;进入源代码看哪里可以注入发现 二.在ua头注入 Referer:"οnclick"alert(1)"type"text…