MySQL Doublewrite Buffer 有了解过吗?

引言:在数据库管理中,确保数据的完整性和一致性是至关重要的。然而,在持久化数据到磁盘的过程中,可能会遇到各种意外情况,如断电或系统崩溃,从而导致部分数据写入,而另一部分数据未能成功写入,这就产生了部分页面写问题。MySQL 中的 InnoDB 存储引擎为了解决这一问题,引入了 Doublewrite Buffer 机制。

题目

MySQL Doublewrite Buffer 有了解过吗?

推荐解析

Doublewrite Buffer 这玩意是啥用呢?

我们都知道 innodb 默认一页是 16K,而操作系统 Linux 内存页是 4K,那么一个 innodb 页对应 4 个系统页。

所以 innodb 的一页数据要刷盘等于需要写四个系统页,那假设一页数据落盘的时候,只写了一个系统页 就断电了,那 innodb 一页数据就坏了,然后就 g 了,恢复不了。

即产生了部分页面写问题,因为写 innodb 的一页无法保证原子性,所以引入了 Doublewrite Buffer。

其实就是当 innodb 要将数据落盘的时候,先将页数据拷贝到 Doublewrite Buffer 中,然后 Doublewrite Buffer 再刷盘到 Doublewrite Buffer Files,这时候数据已经落盘了。

然后再将数据页刷盘到本该到文件上。

从这个步骤我们得知,数据是写了两次磁盘,所以这玩意叫 double write。

之所以这样操作就是先找个地方暂存这次刷盘的完整数据,如果出现断电这种情况导致的部分页面写而损坏原先的完整页,可以从 Doublewrite Buffer Files 恢复数据。

但虽然是两次写,性能的话也不会低太多,因此数据拷贝到 Doublewrite Buffer 是内存拷贝操作,然后写到 Doublewrite Buffer Files 也是批量写,且是顺序写盘,所以整体而已,性能损失不会太多。

有了这玩意,在崩溃恢复的时候,如果发现页损坏,就可以从 Doublewrite Buffer Files 里面找到页副本,然后恢复即可。

工作流程

当执行写操作(如INSERT、UPDATE或DELETE)时,MySQL 会首先将数据写入双写缓冲区。接着,这些数据会被同步到 Doublewrite File 中,这一过程由后台线程完成以确保数据持久性。一旦 Doublewrite File 中的数据被确认写入磁盘,MySQL 就会将数据写入实际的数据文件中。如果在写操作过程中发生故障,MySQL 可以从 Doublewrite File 中恢复数据,因为这里的数据是完整的,可以用来修复损坏的数据文件,保证数据的完整性和一致性。

好处

1)数据完整性保障: Double Write Buffer确保了数据的完整性,即使在写操作过程中发生故障,也能够从Double Write Buffer中恢复数据。这种机制有效地防止了数据损坏或丢失,提高了数据库的可靠性。

2)性能优化**:** 虽然Double Write Buffer会增加写入操作的开销,但它通过批量写入和顺序写入的方式提高了性能。它允许后台线程异步地将数据写入Double Write Buffer和Double Write File,从而减少了写操作对数据库性能的影响。

3)减少碎片写入: Double Write Buffer的使用减少了碎片写入的可能性,因为它会将数据收集到一起批量写入到Double Write File中。这有助于提高磁盘利用率和写入效率。

4)提高恢复速度**:** 在数据库恢复过程中,可以利用Double Write Buffer中的数据快速修复损坏的数据文件,而无需执行完整的数据恢复过程。这样可以显著缩短数据库恢复的时间,减少业务中断的风险。

其他补充

鱼聪明 AI 的回答:

鱼聪明 AI 地址:https://www.yucongming.com/

MySQL实现Double Write Buffer的方式是将数据首先写入到内存中的Double Write Buffer中,然后再将其同步到磁盘上的Double Write File中。这个过程是由后台线程完成的,确保数据的持久性和完整性。

除了Double Write Buffer,还有一些其他的方案可以提高写入操作的性能和可靠性,例如:

  1. Write-Ahead Logging (WAL):WAL是一种常见的技术,通过先将修改操作记录到日志文件中,然后再将其应用到数据文件中,来确保数据的持久性和完整性。WAL可以减少数据文件的随机写入,提高写入性能。
  2. 数据页级别的校验和:一些数据库系统在数据页中添加校验和,可以在写入时检测到数据页的损坏,从而提高数据的完整性。
  3. 闪存缓冲区(Flashcache):一些数据库系统使用闪存缓冲区来加速写入操作。闪存缓冲区可以在内存和磁盘之间缓存数据,减少随机写入,提高写入性能。
  4. 其他缓冲技术:还有一些其他的缓冲技术,如缓存写入(Write-back Cache)和延迟写入(Lazy Write),可以在一定程度上提高写入性能,但需要权衡数据的持久性和性能之间的关系。

总的来说,Double Write Buffer是MySQL实现数据写入的一种重要机制,但也可以结合其他方案来提高写入性能和数据完整性。

欢迎交流

Double Write Buffer 属于执行一条 SQL 语句的最后一个步骤,结合三个日志,可以去想一想执行流程,总共大概有 15 个流程,能够完整答出来肯定是很加分的,在文末还剩三个问题,欢迎小伙伴在评论区留言!

1)Double Write Buffer的性能损失情况是如何评估的?在哪些情况下,性能损失可能会更为显著?

2)Double Write Buffer如何与MySQL的日志系统(如redo log和binlog)相互作用?它们之间有什么区别和联系?

3)对于高并发写入的场景,Double Write Buffer可能会带来哪些挑战?有什么优化策略可以应对这些挑战?

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

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

相关文章

揭秘!如何从精益生产转向智能制造

企业在“工业4.0、智能制造、互联网”等概念满天飞的环境下迷失了方向,不知该如何下手,盲目跟风。 君不见,很多企业在“工业4.0、智能制造、互联网”等概念满天飞的环境下迷失了方向,不知该如何下手,盲目跟风&#xf…

2024下《系统集成项目管理工程师》50个高频考点汇总!值得收藏

宝子们!5月软考考完了,终于可以考系统集成了! 整理了50个高频考点,涵盖全书90%考点,先把这个存下!再慢慢看书,边看书边背这个 1、信息安全的基本要素有: (1&#xff09…

迈入智能新纪元:智慧机房运维系统引领行业变革

在数字化飞速发展的今天,机房作为信息时代的“心脏”,其稳定运行对于企业的业务连续性至关重要。然而,传统的机房运维模式面临着诸多挑战,如响应速度慢、故障定位难、资源浪费大等问题。智慧机房运维系统,它将以智能化…

重磅:吴恩达最新的机器学习书籍《Machine Learning Yearning》两年磨一剑

《Machine Learning Yearning》是吴恩达历时两年打磨而成的机器学习和深度学习实践宝典。这本书旨在为读者提供实战经验,以帮助他们在机器学习项目中取得成功。 吴恩达通过自身多年的实践经验,为读者提供了宝贵的指导,涵盖了从项目构建到调试…

ts类型声明文件、内置声明文件

1. ts类型声明文件 在ts中以d.ts为后缀的文件就是类型声明文件,主要作用是为js模块提供类型信息支持,从而获得类型提示 1.1 第三方包用ts编写的,会自动生成一个 .d.ts文件,进行类型声明 1.2 有些包不是用ts编写的,在…

LangChain真的好用吗?谈一下LangChain封装FAISS的一些坑

前言 最近在做一个知识库问答项目,就是现在大模型浪潮下比较火的 RAG 应用。LangChain 可以说是 RAG 最受欢迎的工具,因此我首选 LangChain 来快速构建我的应用。坦白来讲 LangChain 本身一套对于组件的定义已经让我感觉很复杂,为什么采用 f…

Java Web学习笔记6——盒子模型

视频标签&#xff1a;<video> src: 规定视频的URL controls&#xff1a;显示播放控件 width&#xff1a;播放器的宽度 height&#xff1a;播放器的高度 音频标签&#xff1a;<audio> src: 规定音频的URL controls: 显示播放控件 段落标签&#xff1a;<p&g…

Git版本控制:核心概念、操作与实践

Git是一种分布式版本控制系统&#xff0c;被广泛应用于软件开发过程中。本文将介绍Git的核心概念、常用操作以及最佳实践&#xff0c;帮助读者掌握Git的基本技巧&#xff0c;提高团队协作效率。 一、引言 在软件开发过程中&#xff0c;版本控制是至关重要的。它能帮助我们跟踪…

linux驱动学习(七)之混杂设备

需要板子一起学习的可以这里购买&#xff08;含资料&#xff09;&#xff1a;点击跳转 一、混杂设备 混杂设备也叫杂项设备&#xff0c;是对普通的字符设备(struct cdev)的一种封装,设计目的就是为了简化字符设备驱动设计的流程。具有以下特点&#xff1a; 1) 主设备号为10&a…

全面解析:渗压计数据如何预测地下水趋势

随着人们对水资源日益增长的需求和对环境保护意识的提升&#xff0c;地下水位的监测和预测成为了水利工程和环境科学领域的重要研究内容。渗压计作为一种能够测量土壤或岩石中孔隙水压力的仪器&#xff0c;在地下水位的监测中发挥着关键作用。本文将从渗压计的工作原理、安装方…

GD32F4XX的ISP方式下载程序时的串口选择

官方资料 详细信息可参考GD32F4xx的用户手册&#xff0c;第 1.4 章节 引导配置 。 版本是 &#xff1a;GD32F4xx_User_Manual_Rev3.0_CN 资料链接: https://www.gd32mcu.com/cn/download/6?kwGD32F4

HTML到PDF转换,11K Star 的pdfmake.js轻松应对

在Web开发中&#xff0c;将HTML页面转换为PDF文件是一项常见的需求。无论是生成报告、发票、还是其他任何需要打印或以PDF格式分发的文档&#xff0c;开发者都需要一个既简单又可靠的解决方案。幸运的是&#xff0c;pdfmake.js库以其轻量级、高性能和易用性&#xff0c;成为了许…

16 - 平均售价(高频 SQL 50 题基础版)

16 - 平均售价 # 注意&#xff1a;between 小值 and 大值 select u.product_id, round(sum(u.units*p.price)/sum(u.units),2) average_price from Prices p left join UnitsSold u on p.product_idu.product_id -- and where u.purchase_date between p.start_date and p.e…

AB测试学习(附有相关代码)

目录 一、基本概念1. 定义2. 作用3. 原理 二、实验基本原则三、实验步骤四、实验步骤详解1. 确定实验目的2. 确定实验变量3. 实验指标设计3.1 实验指标类型&#xff08;按作用区分&#xff09;3.1.1 核心指标3.1.2 驱动指标&#xff08;跟踪指标&#xff09;3.1.3 护栏指标 3.2…

使用node将页面转为pdf?(puppeteer实现)

本文章适合win系统下实验&#xff08;linux&#xff0c;mac可能会出现些莫名其妙的bug我也不会解决&#xff09; 具体过程 首先了解什么时无头浏览器启动无头浏览器打开指定的url页面设置导出pdf格式开始转化完整基础代码 首先了解什么时无头浏览器 没有界面的浏览器下载pupp…

matlab使用教程(92)—流线图、流带图和流管图

1.使用向量数据显示流线图 MATLAB 向量数据集 wind 代表北美地区的气流。本示例结合使用了几种方法&#xff1a; 利用流线跟踪风速 利用切片平面显示数据的横截面视图 利用切片平面上的等高线提高切片平面着色的可见性 1.1确定坐标的范围 加载数据并确定用来定位切片平面…

SpringBoot发邮件服务如何配置?怎么使用?

SpringBoot发邮件需要的参数&#xff1f;邮件发送性能如何优化&#xff1f; 在SpringBoot项目中配置发邮件服务是一个常见的需求&#xff0c;它允许我们通过应用程序发送通知、验证邮件或其他类型的邮件。AokSend将详细介绍如何在SpringBoot中配置发邮件服务。 SpringBoot发邮…

qmt量化交易策略小白学习笔记第17期【qmt编程之获取对应周期的北向南向数据--方式1:内置python】

qmt编程之获取对应周期的北向南向数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取…

小程序开发平台版源码系统——社区论坛小程序功能 带完整的安装代码包以及搭建教程

系统概述 这款社区论坛小程序源码系统是一款功能强大、易于使用的开发平台版源码系统。它采用先进的技术架构&#xff0c;结合了丰富的功能模块&#xff0c;能够满足不同用户的需求。该系统具有高度的可扩展性和灵活性&#xff0c;能够根据用户的需求进行定制化开发&#xff0…

【ffmpeg】本地格式转换 mp4转wav||裁剪mp4

个人感受&#xff1a;太爽了&#xff01;&#xff01;&#xff01;&#xff08;可能用惯了转换网站和无良的转换软件&#xff09; ———— 使用FFmpeg把mp4文件转换为WAV文件 - 简书 (jianshu.com) FFMPEG 视频分割和合并 - 简书 (jianshu.com) ———— 示例 ffmpeg -i …