MySQL事务日志—redo日志介绍

MySQL事务日志—redo日志

事务有4种特性: 原子性、一致性、隔离性和持久性。

那么事务的四种特性到底是基于什么机制实现?

  • 事务的原子性、一致性由事务的 undo 日志
  • 事务的隔离性由锁机制和MVCC实现。
  • 事务的持久性由redo 日志来保证。

两类日志概述:

  • REDO LOG 称为重做日志,用于保存已提交事务的页修改操作, 保证事务的持久性。
  • UNDO LOG 称为回滚日志, 回滚行记录到某个特定版本, 用来保证事务的原子性、一致性。

redo日志作用

背景:在真正访问页面之前,需要把在磁盘上的页缓存到内存中的 Buffer Pool之后才可以访问。所有的变更都必须先更新缓冲池中的数据,然后缓冲池中的脏页会以一定的频率被刷入磁盘(checkPoint机制 ) ,通过缓冲池来优化CPU和磁盘之间的鸿沟, 这样就可以保证整体的性能不会下降太快。

问题:事务提交并不会触发check point机制马上进行持久化,所以有可能存在事务内容丢失的情况。

redo日志就是保证事务提交后的持久化的一种机制。如果发生宕机,只需要保证数据页的修改记录已经保存到了在redo log中,之后重启就就可以通过redo log去重新刷盘,保证了持久化。

在这里插入图片描述

为什么不是直接刷盘,而是把内存数据的修改记录到redo日志里?redo日志不也是磁盘中的吗?

  1. 数据修改量与刷盘的数据量的差距太大,因为mysql是以页为单位进行IO,而修改的数据量可能只有几个字节。
  2. 直接刷盘效率太低,因为SQL修改的磁盘页不一定连续,所以说是随机IO。

使用redo日志的优点?

  1. 降低了完整刷盘的频率,每次只记录页面修改的内容即可
  2. redo log是顺序写入磁盘的,属于顺序IO,效率高

redo log什么时候产生?

实时产生,每执行一个SQL语句对应的数据修改都会记录在redo log中,而不是事务提交才记录

redo日志工作原理

redo log的组成

Redo log可以简单分为以下两个部分:

  • 重做日志的缓冲 ( red o log buffer) , 保存在内存中, 是易失的。

  • 在这里插入图片描述

  • 重做日志文件 ( redo log file) , 保存在硬盘中, 是持久的。如var/lib/mysql目录下的ib_logfile0和 ib _logfile1 文件即为REDO日志。

redo log工作流程

InnoDB的更新操作采用的是 Write Ahead Log(预先日志持久化)策略, 即先写日志, 再写入磁盘。

mysql事务对数据进行修改,大致过程:

  1. 开始一个事务
  2. 执行SQL语句,先将原始数据从磁盘中读入内存的buffer pool中来
  3. 记录数据旧值到undo log以便于回滚,然后再对内存中的buffer pool数据进行修改
  4. 将内存页的修改情况记录到redo log buffer(内存中)
  5. 如果事务中途失败,则通过undo log回滚
  6. commit事务,根据刷盘策略的配置决定采取什么行为,默认:把redo buffer数据直接追加到redo磁盘文件中
  7. 按照一定频率执行真正的刷盘(check point机制)
  8. 如果事务成功commit但没有成功刷盘的时候(步骤5-6之间),发生宕机,则重启后会根据redo日志中的记录再执行刷盘

在这里插入图片描述

redo日志刷盘策略

redo log刷盘策略是指将redo buffer同步到redo log磁盘文件中的过程

在这里插入图片描述

注意:redo log buffer刷盘到 redo log file的过程并不是真正的刷到磁盘中去, 只是刷入到文件系统缓征 ( page cache) 中去 , 真正的写入会交给系统自己来决定。那么对于InnoDB来说就存在一个问题, 如果交给系统来同步, 同样如果系统宕机,那么数据也丢失了 (虽然整个系统宕机的概率还是比较小的) 。

针对这种情况, InnoDB给出 innodb _ flush _ log _ at _ trx _ commit参数, 该参数控制 commit提交事务时, 如何将 redo log buffer中的日志刷新到 red o log file中。它支持三种策略:

  • 设置为0: 表示每次事务提交时不进行刷盘操作。(系统默认 master thread每隔1s进行一次重做日志的同步)
  • 设置为1 : 表示每次事务提交时都将进行同步, 刷盘操作 (默认值)
  • 设置为2: 表示每次事务提交时都只把 red o log buffer 内容写入 page cache, 不进行同步。由 os自己决定什么时候同步到磁盘文件。(其实也是交给master thread处理)

拓展:master thread是InnoDB存储引擎的后台线程, 每隔1 秒, 就会把 redo log buffer 中的内容写到文件系统缓存( page cache) , 然后调用刷盘操作。三种刷盘策略都会收到master thread的影响。

在这里插入图片描述

策略一:事务提交,立马同步到redo log文件

优点:安全性很高,只要事务提交了,数据就是安全的

缺点:速度慢

数据丢失场景:事务没有完成提交(会回滚)

在这里插入图片描述

策略二:事务提交,只保存到文件系统的page cache

优点:速度快,安全性也相对较高,因为只要把修改记录保存到page cache中了,即使MySQL崩溃了,数据也还是能够保证持久化,除非整个系统宕机了(概率小)

缺点:有概率产生事务数据丢失的情况,丢失1s的数据(等待master thread同步的1s的过程中宕机了)

数据丢失场景:事务提交后的1s内,操作系统挂了

在这里插入图片描述

策略三:事务提交,什么也不干

优点:速度快

缺点:安全性差,1s内发生MySQL奔溃或者OS宕机,都会丢失事务的修改数据

数据丢失场景:事务提交后的1s内,MySQL或者操作系统挂了
在这里插入图片描述

总结

redo buffer是实时变化的,而刷盘不是实时进行的,根据同步时机,可分为如下三种:

  • 事务commit时,将redo buffer同步到操作系统的文件缓存cache中,然后马上将文件缓存cache同步写入到redo log文件中(默认,做两步
  • 事务commit时,只将redo buffer同步到操作系统的文件缓存cache中,具体什么时候同步到redo log文件中,取决于后台子线程(做一步,另一步交给后台线程
  • 事务commit时,什么也不做,什么时候同步完全取决于后台子线程(什么都不做,都交给后台线程

三种策略的安全性由高到低,速度由慢到快,但出于安全考虑,最好还是选择默认的。

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

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

相关文章

【大数据】Hive快速入门

文章目录 概述一、Hive的基本概念二、Hive的架构与组件三、Hive的特点与优势四、Hive的应用场景五、Hive的官方网站与资源 驱动说明(Driver)一、主要功能二、与其他组件的交互三、工作流程四、重要性 元数据模型(Metastore)一、Hive元数据模型的基本概念…

vue3 + vite + cesium项目

GitHub - tingyuxuan2302/cesium-vue3-vite: 项目基于 vue3 vite cesium,已实现常见三维动画场,欢迎有兴趣的同学加入共建,官网服务器相对拉胯,请耐心等候...https://github.com/tingyuxuan2302/cesium-vue3-vite/tree/github

HTMLCSS练习

1) 效果如下 2) 代码如下 2.1) HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" conte…

Ultralytics:YOLO11使用教程

Ultralytics&#xff1a;YOLO11使用教程 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows YOLO11使用教程进行目标检测进行实例分割进行姿势估计进行旋转框检测进行图像分类 参考文献 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多…

一文解读数据中台附搭建指南

数据是企业的核心资产&#xff0c;更是企业数字化转型的关键驱动力。为了更好地管理和利用数据&#xff0c;进行数据共享&#xff0c;充分发挥数据的作用&#xff0c;越来越多的企业开始构建实时数据中台。 一数据中台 定义&#xff1a;数据中台是将企业内部各个部门、系统、应…

Qt 自绘开关按钮以及设计器中的提升为用法

文章目录 自绘按钮实现概要效果图代码 提升为用法介绍步骤 总结 自绘按钮实现 概要 当我们需要一个开关样式的QPushbutton&#xff0c;没有图片的话&#xff0c;我们可以采用自绘的形式实现。且使用QtDesinger中提升为Promote to的功能加入界面中&#xff0c;而不是使用代码的…

OpenCV高级图形用户界面(1)创建滑动条函数createTrackbar()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 创建一个滑动条并将其附加到指定的窗口。 该函数 createTrackbar 创建一个具有指定名称和范围的滑动条&#xff08;滑块或范围控制&#xff09;…

作为一名测试工程师如何学习Kubernetes(k8s)技能

前言 Kubernetes(K8s)作为云原生时代的关键技术之一&#xff0c;对于运维工程师、开发工程师以及测试工程师来说&#xff0c;都是一门需要掌握的重要技术。作为一名软件测试工程师&#xff0c;学习Kubernetes是一个有助于提升自动化测试、容器化测试以及云原生应用测试能力的重…

重学SpringBoot3-集成Redis(三)之注解缓存策略设置

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;三&#xff09;之注解缓存策略设置 1. 引入 Redis 依赖2. 配置 RedisCacheManager 及自定义过期策略2.1 示例代码&#xff1a;自定…

API接口开发心得,接口封装方法

API&#xff08;应用程序编程接口&#xff09;是定义了一组规则&#xff0c;允许不同的软件应用程序或组件交互的技术。在Web开发中&#xff0c;API通常通过HTTP请求实现。在API接口的开发过程中&#xff0c;接口封装是一个重要环节。以下是一些API接口开发心得以及接口封装方法…

如何使用ssm实现大学生兼职跟踪系统

TOC 10909ssm大学生兼职跟踪系统 系统概述 进过系统的分析后&#xff0c;就开始记性系统的设计&#xff0c;系统设计包含总体设计和详细设计。总体设计只是一个大体的设计&#xff0c;经过了总体设计&#xff0c;我们能够划分出系统的一些东西&#xff0c;例如文件、文档、数…

【探测器】线阵相机中的 TDI 技术

【探测器】线阵相机中的 TDI 技术 1.背景2.TDI相机3.场景应用 1.背景 TDI 即Time Delay Integration时间延迟积分。 TDI相机是线阵相机的一种特殊类型&#xff0c;带有独特的时间延迟积分&#xff08;TDI&#xff09;技术。 换句话说&#xff0c;TDI相机是线阵相机的一个高级版…

点评项目-6-缓存更新策略、缓存穿透、雪崩

缓存更新策略 使用 redis 缓存记录的信息&#xff0c;有可能在数据库被信息被修改导致信息不一致&#xff0c;使用缓存更新来解决这个问题 缓存更新策略主要有三种&#xff1a; 1.内存淘汰(redis默认开启) 2.超时剔除(给key添加TTL时间) 3.主动更新(编写业务逻辑) 主动更新策…

vite学习教程02、vite+vue2配置环境变量

文章目录 前言1、安装依赖2、配置环境变量3、应用环境变量4、运行和构建项目资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1…

Linux使用Docker部署Paperless-ngx结合内网穿透打造无纸化远程办公

文章目录 前言1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux系统本地部署Paperless-ngx开源文档管理系统&#xff0c;并结合cpolar内网穿透工具解决本地部署…

又被特斯拉演了?继续“画饼式”发布Robotaxi,产业链静观其变

9月底的暴涨后&#xff0c;A股资产正经历回调&#xff0c;科技板块变现参差。不过&#xff0c;无人驾驶领域的预期依然很强。 10月10日科技股全线调整之际&#xff0c;无人驾驶板块盘中的巨幅震荡拉升就是典型的预热动作。东箭科技、天龙股份等多只智能驾驶个股涨停。核心驱动…

【STM32开发之寄存器版】(九)-模数转换ADC

一、前言 本次DEMO目标&#xff1a; 本文将使用STM32F103ZET6的ADC1通道1来采样外部电压值&#xff0c;并使用串口在上位机XCOM上打印出电压值。 二、模数转换原理与基本概念 2.1 ADC基本概念 模数转换器&#xff08;ADC&#xff0c;Analog-to-Digital Converter&#xff09;是…

与ZoomEye功能类似的搜索引擎还有哪些?(渗透课作业)

与ZoomEye功能类似的搜索引擎有&#xff1a; Shodan&#xff1a;被誉为“物联网的搜索引擎”&#xff0c;专注于扫描和索引连接到互联网的各种设备&#xff0c;如智能家居设备、工业控制系统、摄像头、数据库等。它提供全球互联网设备的可视化视图&#xff0c;帮助用户了解网络…

xss-labs靶场第一关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机&#xff1a;本机(127.0.0.1) 靶 机&#xff1a;本机(127.0.0.…

AI时代大厂AI项目管理学习路线

AI时代避免被裁员&#xff0c;大厂AI项目管理学习路线主要包括&#xff1a; 1、AI项目管理基础技能。 2、项目管理AI技术知识。 3、数据分析与决策。 4、AI项目管理工具。 5、AI项目管理知识扩展。 01 AI项目管理基础技能。 AI项目管理基础技能构成了项目管理的骨架&…