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

目录

  • 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.mzph.cn/diannao/52598.shtml

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

相关文章

【生活英语】1、高兴与难过

【生活英语】1、高兴与难过 一、我非常非常开心二、心情三、不开心四、运气五、英语对话1、We broke up2、中奖了 一、我非常非常开心 (1) I’m really happy. (2) I’m really overjoyed. (3) I couldn’t be happier. I couldn’t agree with you more. 我非常赞同你。 (4) …

C++ TinyWebServer项目总结(8. 高性能服务器程序框架)

《Linux 高性能服务器编程》一书中,把这一章节作为全书的核心,同时作为后续章节的总览。这也意味着我们在经历了前置知识的学习后,正式进入了 Web 服务器项目的核心部分! 前置内容回顾: 1. C TinyWebServer项目总结&…

每日一问:GET请求和POST请求的区别

每日一问:GET请求和POST请求的区别 在Web开发中,GET请求和POST请求是最常见的两种HTTP请求方法。尽管它们在功能上有许多相似之处,但在使用场景、数据传递方式、缓存策略等方面存在显著差异。了解这些区别不仅有助于我们在开发中做出正确的选…

Docker拉取镜像-2024-07-有效

Docker拉取镜像-有效 配置加速地址 首先&#xff0c;创建Docker配置目录&#xff1a;sudo mkdir -p /etc/docker然后&#xff0c;编辑daemon.json文件&#xff0c;添加以下加速地址&#xff1a;sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors"…

go gc信息如何查看

目录 1.几种常见方法1.1.设置环境变量 GODEBUG打印GC日志1.2.使用 debug.ReadGCStats1.3.使用 runtime.ReadMemStats 2.GC日志打印示例3.参考 在Go语言中&#xff0c;可以通过设置环境变量和使用运行时包中的调试功能来打印垃圾回收&#xff08;GC&#xff09;的信息。 1.几种…

等保测评中的安全测试方法

等保测评&#xff0c;即信息安全等级保护测评&#xff0c;是我国网络安全领域的重要评估机制&#xff0c;用于验证网络系统或应用是否满足相应的安全保护等级要求。在等保测评中&#xff0c;安全测试方法扮演着至关重要的角色。本文将详细介绍等保测评中常用的安全测试方法及其…

LinkedHashMap和TreeMap的基本使用

一.LinkedHashMap集合&#xff1a;&#xff08;是HashMap集合的儿子&#xff0c;Map集合的孙子&#xff09; 1.特点&#xff1a; 2.代码实现&#xff1a; 1)键的唯一性&#xff1a; package com.itheima.a01myMap; ​ import java.util.LinkedHashMap; ​ public class A07_…

二十三种模式之单例模式(基础了解)

1.设计模式的分类 创建型模式(五种)&#xff1a;工厂方法模式、单例模式、抽象工厂模式、原型模式、建造者模式。结构型模式(七种)&#xff1a;适配器模式、代理模式、装饰器模式、桥接模式、外观模式、享元模式、组合模式。行为型模式(十一种)&#xff1a;状态模式、模板方法…

Flamingo中的Perceiver Resampler

在 Flamingo 模型中&#xff0c;Perceiver Resampler 是一个关键组件&#xff0c;用于将输入的多模态数据&#xff08;如图像和文本&#xff09;转化为适合Transformer处理的表示形式。具体来说&#xff0c;它是为了解决高维视觉输入&#xff08;如图像&#xff09;和低维语言表…

【Docker项目实战】使用Docker部署webtop桌面版Linux环境

【Docker项目实战】使用Docker部署webtop桌面版Linux环境 一、webtop介绍1.1 webtop简介1.2 主要特点1.3 使用场景二、webtop相关说明2.2 webtop支持架构2.2 镜像版本说明三、本地环境介绍3.1 本地环境规划3.2 本次实践介绍四、本地环境检查4.1 检查Docker服务状态4.2 检查Dock…

YOLOv8目标检测部署RK3588全过程,附代码pt->onnx->rknn,附【详细代码】

目录 一、训练yolov8模型&#xff0c;得到最佳权重文件best.pt 二、pt转onnx,即best.pt->best11.onnx 1、对下载的YOLOv8代码修改 2、加入模型导出功能&#xff0c; 3、导出指令采用如下代码 三、ONNX转RKNN 四、RK3588部署 1、拷贝rknn文件到rk3588板子内 2、执行…

48.x86游戏实战-封包抓取进图call

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

使用Supervisor守护Nginx进程

supervisor是个好工具。superviosr是一个Linux/Unix系统上的进程监控工具&#xff0c;Supervisor是用Python开发的一套通用的进程管理程序&#xff0c;能将一个普通的命令行进程变为后台daemon&#xff0c;并监控进程状态&#xff0c;异常退出时能自动重启。只要在supervisor的…

递归神经网络 (RNN) 简介

文章目录 一、介绍二、什么是递归神经网络 &#xff08;RNN&#xff09;&#xff1f;三、展开递归神经网络四、训练递归神经网络五、RNN 的类型六、现实生活中的 RNN 用例七、RNN 的两个主要限制八、RNN的变体8.1 双向递归神经网络 &#xff08;BRNN&#xff09;8.2 长短期记忆…

YOLOv8改进 | 融合改进 | C2f融合Faster-GELU模块提升检测速度【完整代码 + 主要代码解析】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

240824字节笔试题复盘

测试/测试开发方向 1、用户文档测试场景 2、大根堆排列顺序 3、时间复杂度对比 4、资源分配 5、矩阵排列 6、TCP和UDP区别 7、栈 8、用例分析与选择 9、信息脱敏 10、数据库并发 11、锁 12、边界值等价类用例设计 13、信息安全与防御 14、有关复选框的测试用例 …

节省 60% 成本还能加速业务扩展,ScraperAPI 在云基础设施上的多年实践

对于流量密集型的业务来讲&#xff0c;在创业初期&#xff0c;最头疼的就是数据库的管理&#xff0c;以及大量流量带来的高额账单。然而&#xff0c;ScraperAPI 通过结合使用 DigitalOcean 的 Droplet、托管数据库、应用托管服务和 Kubernetes&#xff0c;一箭三雕&#xff0c;…

基于信号量和环形队列的生产者消费者模型

文章目录 POSIX信号量信号量接口初始化信号量销毁信号量等待信号量发布信号量 基于环形队列的生产者消费者模型单生产单消费多生产多消费 POSIX信号量 POSIX信号量和SystemV信号量作用相同&#xff0c;都是用于同步操作&#xff0c;达到无冲突的访问共享资源目的。 但POSIX可以…

接口返回结果封装

接口返回结果封装 1、错误信息枚举 package com.zhw.enums;public enum AppHttpCodeEnum {// 成功SUCCESS(200,"操作成功"),// 登录NEED_LOGIN(401,"需要登录后操作"),NO_OPERATOR_AUTH(403,"无权限操作"),SYSTEM_ERROR(500,"出现错误&quo…

K-medoids算法原理及Python实践

一、原理 K-medoids算法是一种聚类算法&#xff0c;它的原理与K-Means算法相似&#xff0c;但关键区别在于它使用数据集中的实际点&#xff08;称为medoids&#xff09;作为簇的中心点&#xff0c;而不是像K-Means那样使用簇内所有点的平均值。以下是K-medoids算法的主要原理&…