彻底讲透redo日志磁盘顺序写机制

news2025/1/11 20:04:23

文章目录

  • 引言
  • Redo日志的作用
  • Redo日志的磁盘顺序写机制
    • 技术和策略:
  • 刷盘机制详解
    • 1. Checkpoint(检查点)
    • 2. Commit(提交)
  • 优化策略
    • 举例说明
  • 参考文档

在这里插入图片描述

引言

背景:今天看了一节某培训机构的公开课关于BufferPool缓存与Redo日志的,讲的很深入,但是太局限,所以今天抽时间来整理总结一下,方便理解消化。

redo日志在数据库中相互协同工作,提供了高效的数据访问和数据安全性。BufferPool缓存通过减少磁盘访问,提高数据的读取和修改性能;redo日志通过记录事务的修改操作,确保数据的持久性和一致性。它们共同保障了数据库的高性能和数据的可靠性。

在这里插入图片描述
图片来源MySQL官网 《15.4 InnoDB Architecture》 https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html
Redo日志是数据库系统中的一种重要的日志记录机制,用于记录已经发生的事务操作,以保证数据库的一致性和持久性。在数据库中,redo日志的磁盘顺序写机制是一种优化策略,旨在提高系统的性能和效率。

在了解redo日志的磁盘顺序写机制之前,我们先来了解一下redo日志的基本概念和作用。

Redo日志的概念:
Redo日志是数据库系统中的一种恢复日志,用于记录已经发生的事务操作。具体来说,当用户提交一个事务时,数据库系统会将该事务的操作记录到redo日志中。这样,即使在事务提交之前发生系统崩溃或断电等异常情况,数据库系统仍然可以通过redo日志进行恢复,确保数据的一致性和持久性。

Redo日志的作用

  1. 数据库恢复:通过redo日志,数据库系统可以将已经提交的事务操作重新应用到数据库中,从而实现数据库的恢复。
  2. 数据库复制:通过redo日志,可以将主数据库上已经提交的事务操作传输给备份数据库,从而实现数据库的复制。

了解了redo日志的基本概念和作用之后,我们再来看一下redo日志的磁盘顺序写机制。

Redo日志的磁盘顺序写机制

磁盘顺序写是指将数据按照顺序写入磁盘,而不是随机写入磁盘。在数据库中,redo日志的磁盘顺序写机制是一种优化策略,通过将redo日志的写入操作转化为磁盘的顺序写入,从而提高系统的性能和效率。

数据库系统会将redo日志的写入操作缓存在内存中,当满足一定条件时(比如redo日志缓冲区已满或事务提交),系统会将缓存中的redo日志批量地进行顺序写入磁盘。这样做的好处是可以减少磁盘的寻道时间和旋转延迟,并且可以将多个小的写操作合并为一个大的顺序写操作,从而提高磁盘的写入性能。

为了实现redo日志的磁盘顺序写机制,数据库系统通常会采用以下一些策略

技术和策略:

  1. 日志缓冲区:数据库系统会将redo日志的写入操作缓存在内存中的日志缓冲区,从而避免了每次写操作都需要直接写入磁盘的开销。
  2. 日志刷新机制:当满足一定条件时(比如redo日志缓冲区已满或事务提交),数据库系统会将日志缓冲区中的redo日志批量地刷新到磁盘上,从而实现磁盘的顺序写入。
  3. Checkpoint机制:数据库系统会定期地将内存中的数据和日志刷新到磁盘上,以保证数据的一致性和持久性。通过合理设置checkpoint的位置和时间间隔,可以减少redo日志的刷新次数,进一步提高系统的性能和效率。

redo日志的磁盘顺序写机制是一种优化策略,通过将redo日志的写入操作转化为磁盘的顺序写入,从而提高系统的性能和效率。数据库系统通过日志缓冲区、日志刷新机制和Checkpoint机制等技术和策略来实现redo日志的磁盘顺序写机制。

刷盘机制详解

Redo Log 采用先写日志(Write-Ahead Logging, WAL)机制,即在任何数据修改实际写入磁盘之前,需要先将该修改操作写入Redo Log。

Redo Log 刷盘(Flush)机制是指将缓冲区中的Redo Log 数据刷写(写入)到磁盘上。这个过程对于保证日志数据的持久化和数据一致性至关重要。以下是Redo Log 刷盘机制的两种主要触发方式:

1. Checkpoint(检查点)

当达到特定的检查点时,InnoDB引擎会触发将缓冲区中的所有Redo Log 数据写入磁盘的操作。InnoDB 在生成检查点时,会同时完成一些其他与数据一致性相关的操作,例如将修改过的脏页写回到磁盘。检查点的触发条件包括:
- 达到预设的时间间隔(由参数 innodb_log_checkpoint_time 控制)
- 达到预设的日志大小(由参数 innodb_log_checkpoint_interval 控制)
- 达到日志文件的一半(由参数 innodb_log_file_size 控制)
- 服务器正常关闭时

2. Commit(提交)

当事务成功提交时,InnoDB引擎会将该事务对应的Redo Log 数据从缓冲区写入到磁盘。这样可以确保已提交事务的修改操作在系统崩溃后可以被恢复。提交时刷盘的策略可以使用参数 innodb_flush_log_at_trx_commit 进行配置:
- 值为 0:表示每次提交时不刷盘,只有在达到检查点时才刷盘。
- 值为 1:表示每次提交时都刷盘(默认值),这可以确保最高的数据一致性,但性能可能会受到影响。
- 值为 2:表示每次提交时只把日志写入到操作系统缓存中,而不立即刷盘,这样可以提高性能,但在操作系统崩溃时可能导致数据不一致。

Redo Log 的刷盘机制在提供数据一致性的保证的同时,也要权衡性能,因此在实际应用中需要根据实际需求进行合适的参数调整。

优化策略

在实际应用中,你需要根据你的需求和环境来调整参数。

比如,如果你的系统需要强一致性,你可能会倾向于设置 innodb_flush_log_at_trx_commit 为1。因为这样做可以确保每次事务提交时,都会将日志立即刷盘,最大程度地保证了数据的一致性。但是,这样做的代价是性能可能会有所降低,因为频繁的磁盘IO操作会影响系统的性能。

另一方面,如果你的系统更关心性能,你可能会考虑设置 innodb_flush_log_at_trx_commit 为0或2。这样,日志的刷盘操作会被推迟到检查点,或者只写入操作系统缓存,从而减少了磁盘IO操作,提升了性能。但是,这样做的代价是在系统崩溃的情况下,可能会丢失一部分数据。

此外,你还可以调整 innodb_log_checkpoint_timeinnodb_log_checkpoint_interval 参数来控制检查点的触发频率,以便在性能和数据一致性之间找到一个合适的平衡。

这些参数的设置需要根据你的实际需求和环境来进行。你需要根据你的系统的特性和需求,以及你对性能和数据一致性的权重视程度,来做出合适的决定。

举例说明

例如,如果你的系统是一个在线交易系统,且系统的数据一致性是非常重要的,那么你可能需要设置 innodb_flush_log_at_trx_commit 为1,以确保每个事务提交后,对应的日志都能立即被刷入磁盘,即使在系统崩溃的情况下,也能保证数据的一致性。这种情况下,你可能需要牺牲一些性能。

另一方面,如果你的系统是一个数据分析或报告系统,其中的数据可能不需要实时更新,且对数据一致性的要求不那么高,那么你可以设置 innodb_flush_log_at_trx_commit 为0或2,以提高系统的性能。

同时,你还可以通过调整 innodb_log_checkpoint_timeinnodb_log_checkpoint_interval 参数来控制检查点的触发频率。如果你的系统有大量的写操作,你可能需要更频繁地触发检查点,以将缓冲区中的日志刷入磁盘,防止缓冲区溢出。这可以通过减小 innodb_log_checkpoint_timeinnodb_log_checkpoint_interval 的值来实现。尽管这会增加磁盘I/O操作,但可以防止因缓冲区溢出导致的数据丢失。

反之,如果你的系统的写操作并不频繁,你可能可以增大这两个参数的值,以减少检查点的触发频率,从而降低磁盘I/O操作,提高性能。

实际应用中的参数调整需要根据你的系统需求和环境进行,需要在性能和数据一致性之间找到合适的平衡。记住,任何参数的调整都需要在理解其影响的前提下进行,并在调整后进行充分的测试,以确保系统的稳定性和性能。

参考文档

  1. MySQL 官方文档:InnoDB 参数
  2. MySQL 官方文档:InnoDB Startup Options and System Variables
  3. 参考《高性能MySQL》对InnoDB参数的讲解和调整建议

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

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

相关文章

高速串行总线设计基础

高速串行总线设计(1) 高速信号设计涉及到方方面面的知识积累,也许你认为即使没有掌握甚至没有听过一些高速设计的专业术语,也没有关系?因为专业集成的IP可以帮你解决这一问题,但殊不知,根基不牢…

ABB COM0011 2RAA005844A0007J编码器模块

ABB COM0011 2RAA005844A0007J 编码器模块是用于测量和反馈旋转或线性位置信息的设备,通常用于自动化、机器控制和运动控制系统。以下是该编码器模块可能具备的产品功能: 位置测量:ABB COM0011 2RAA005844A0007J 编码器模块的主要功能是测量旋…

【初阶数据结构】——堆排序和TopK问题

个人主页 代码仓库 C语言专栏 初阶数据结构专栏 Linux专栏 接上篇二叉树和堆的引入 目录 前言 建堆 插入数据向上调整算法建堆 移动数据向上调整算法建堆 无序数组从H-1层向上移动的向下调整算法建堆 堆排序 TOP-K问题 前言 上篇文章详细讲解了堆,…

腐蚀与膨胀,图像处理中的结构元与腐蚀膨胀问题(数字图像处理大题复习 P9)

文章目录 腐蚀膨胀 腐蚀 我们要用结构元 B 来 腐蚀 图像 A 如果结构元 B 放到图像的某个地方,正好能对上,那么就把中心放到结果图像上 这里显然红色框是对不上的,而黄色是对得上的 对不上的,全部补上0,这就是结果了…

HTTP 响应头Cache-Control

每个资源都可以通过Http头Cache-Control来定义自己的缓存策略,Cache-Control控制谁在什么条件下可以缓存响应以及可以缓存多久。 最快的请求是不必与服务器进行通信的请求:通过响应的本地副本,我们可以避免所有的网络延迟以及数据传输的数据…

新版考勤管理系统正式发布

O2OA(翱途)开发平台 V8.1版本,因老的考勤管理系统已经无法满足用户需求,并且在架构和业务结构上都不再符合现在大多数考勤功能的需求。我们对考勤管理重新进行了开发,全新的版本更好用,更直观。 考勤管理对员工的工作出勤情况进行…

Multisim—用示波器观察电流波形

使用仪表里面的current probe:它显示实时电流,但无法将电流波形在示波器中显示。 仿真Simulate >仪器Instruments > 电流探针 current clamp:也就是电流钳,它能够将流经的电流转成电压并输入到示波器中进行显示。 双击图纸上…

手机上比较好用的笔记软件使用哪一款?

手机已经成为我们日常生活不可或缺的一部分,它们伴随着我们的方方面面。在这部小小的设备中,我们可以完成许多任务,其中之一就是记录笔记。手机上的笔记软件如今多种多样,但在选择时,敬业签可能是你不容错过的选择。 …

软件需求文档、设计文档、开发文档、运维文档大全

在软件开发过程中,文档扮演着至关重要的角色。它不仅记录了项目的需求、设计和开发过程,还为项目的维护和管理提供了便利。本文将详细介绍软件开发文档的重要性和作用,以及需求分析、软件设计、开发过程、运维管理和项目管理等方面的文档要求…

YOLOv8快速复现 官网版本 ultralytics

YOLOV8环境安装教程.:https://www.bilibili.com/video/BV1dG4y1c7dH/ YOLOV8保姆级教学视频:https://www.bilibili.com/video/BV1qd4y1L7aX/ b站视频:https://www.bilibili.com/video/BV12p4y1c7UY/ 1 平台搭建YOLOv8 平台:https://www.a…

链表反转-LeetCode206

题目: 给你单链表的头结点head,请反转链表,并返回反转后的链表。 示例: 输入:head [1,2,3,4,5] 输出:[5,4,3,2&#xff0…

MongoDB(二)基础操作 创建、删除等

mongodb有一个特点,如果某个库,库下面没数据(mongodb成集合),该库等于不存在的 mongodb只要创建一个库,在库下写入数据,该库才会生成 mongoshe [-hhost -pxxx] 创建数据库 use 数据库名 # 如果…

四种自动化测试模型实例及优缺点

一,线性测试 1.概念: 通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。 (操作,重复操作,数据)都混合在一起。 2.优点: 每个脚本相对独立&#xff0…

【element-ui】form表单动态修改rules校验项

在项目开发过程中,该页面有暂存和提交两个按钮,其中暂存和提交必填项校验不一样,此时需要动态增减必填项校验 ,解决方法如下: 增加rules校验项 this.$set(this.formRules,name,[{required:true,message:请输入名称,t…

Git 介绍、分布式版本管理软件介绍

文章目录 一. 分布式文件版本管理系统二、Git 介绍2.1. Git 的最基本使用2.2. 工作中使用版本管理工具的经验2.3. Git 的存储方式简介 一. 分布式文件版本管理系统 在分布式文件版本管理系统到来之前,市面上的文件版本管理软件都是集中式的(svn 就是典型…

演讲实录:DataFun 垂直开发者社区基于指标平台自主洞察北极星指标

在7月14日举办的 Kyligence 用户大会的数智新应用论坛上,DataFun COO 杜颖女士为大家带来了《垂直开发者社区基于指标平台自主洞察北极星指标》的主题演讲。接下来,我们一起看看 DataFun 如何在没有专门的 IT 团队的情况下,实现对北极星指标的…

开源框架中的责任链模式实践

作者:vivo 互联网服务器团队-Wang Zhi 责任链模式作为常用的设计模式而被大家熟知和使用。本文介绍责任链的常见实现方式,并结合开源框架如Dubbo、Sentinel等进行延伸探讨。 一、责任链介绍 在GoF 的《设计模式》一书中对责任链模定义的:将…

基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(七)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 模型训练1)数据集分析2)数据预处理3)模型创建4)模型训练5)获取特征矩阵 2. 后端Django3. 前端微信小程序1)小程序全局配置文件2&#xff09…

时序预测 | MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短…

C语言每日一题(1):实现库函数strlen()

文章主题:库函数strlen()的实现所属专栏:C语言每日一题作者简介:每天不定时更新C语言的小白一枚,记录分享自己每日的所思所想。个人主页:[₽]的个人主页 目录 前言 函数介绍 编程起因 设计思路 1.整体逻辑 2.参…