返回顶部
首页 > 资讯 > 数据库 >MySQL中Double Write Buffer的分析是怎样的
  • 709
分享到

MySQL中Double Write Buffer的分析是怎样的

2024-04-02 19:04:59 709人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关Mysql中Double Write Buffer的分析是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Double Wr

这篇文章将为大家详细讲解有关Mysql中Double Write Buffer的分析是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Double Write Buffer是什么?
这是一个buffer,存在于内存中,在持久化到磁盘的时候,这一部分数据会写进innodb的表空间里,由一段连续的pages组成
Double Write这个特性,和命名所描述的完全一致:写两遍~

为什么要引入Double Write Buffer?
引入Double Write Buffer是为了解决partial page write的问题,关于这个问题的描述,引用杨大师的原文,
>>>
InnoDB 的Page Size一般是16KB,其数据校验也是针对这16KB来计算的,将数据写入到磁盘是以Page为单位进行操作的。
而计算机硬件和操作系统,在极端情况下(比如断电)往往并不能保证这一操作的原子性,
16K的数据,写入4K 时,发生了系统断电/os crash ,只有一部分写是成功的,这种情况下就是 partial page write 问题。
<<<

追问1:抛开page不完全写入的这个概念,DB在做crash recovery的时候,不是可以从redo log来重新做一遍么,为什么还要这个特性呢?
解答:原因有两个,
1.由于Page的不完全写入,实际上这个出问题的Page由于没有完全写入所以这个page的checksum是无效的,想恢复这个page的时候,无法定位是哪个page写出了问题;
2.redo-log的原因, mysql的innodb在生成redo-log的时候,并没有写入具体数据的变更,而是只记录了这个变更所在的page信息,具体的格式如下
    [Space-id] [Page-id] [Where-in-the-page-to-modify] [Payload]
其中,space-id记录的是这个信息存储于哪个redo-log文件,page-id记录的就是page的id(..._(:з」∠)_...),其余信息基本如描述所示;
由于redo-log的这种记录方式,使得Mysql不能依靠redo-log去把崩溃前后一段时间的整个事务全部找出来,然后重做;(存都没存数据,怎么恢复╮(╯▽╰)╭

Double Write Buffer工作在哪个阶段/时机?
当innodb从buffer pool中刷新pages到磁盘时,并不是直接往磁盘写,而是先写进这个Double Write Buffer,
然后马上调用fsync(),将这一部分数据写到磁盘上,之后再把这部分的pages写到真正的数据文件里面去;

Double Write Buffer能不能解决问题?
答案肯定是可以~
情景1:innodb从buffer pool往Double Write Buffer写pages的时候,出事故了,发生了page的部分写入;
分析:innodb在crash recovery的时候,检查到数据文件的pages都是正常的,通过比较LSN/checksum能够检查到数据文件的具体状态,然后再去恢复数据;
情景2:Double Write Buffer往真正的数据文件写pages的时候,出事故了,发生了page的部分写入;
分析:由于Double Write Buffer本身有这个pages的完整内容,从Double Write Buffer重新往数据文件写pages即可;

Double Write Buffer对性能的影响?
由于Double Write Buffer本身是一段完全连续的空间,所以Double Write Buffer从内存写到磁盘的时候是完完全全的顺序写
所以对性能的影响并没有从1个fsync()到2个fsync()这么夸张,引用percona的工程师的判断:性能影响不超过5%-10%;

关于MySQL中Double Write Buffer的分析是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中Double Write Buffer的分析是怎样的

本文链接: https://lsjlt.com/news/66600.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL中Double Write Buffer的分析是怎样的
    这篇文章将为大家详细讲解有关MySQL中Double Write Buffer的分析是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Double Wr...
    99+
    2024-04-02
  • MySQL double write存在是怎样的意义
    MySQL double write存在是怎样的意义,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。背景:MySQL默认每个pa...
    99+
    2024-04-02
  • 如何浅析mysql中的double write
    这篇文章给大家介绍如何浅析mysql中的double write ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 介绍double write之前我们有必要了解partial pag...
    99+
    2024-04-02
  • 怎么掌握MySQL中的double write
    本篇内容介绍了“怎么掌握MySQL中的double write”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • 我很理解MySQL中的double write
    本篇文章为大家展示了我很理解MySQL中的double write,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。     MySQL...
    99+
    2024-04-02
  • MySQL中的事务分析是怎样的
    MySQL中的事务分析是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们都知道,计算机处理的速度非常地快,但是再快的计算机,也面临...
    99+
    2024-04-02
  • Cache buffer的状态是怎样的
    Cache buffer的状态是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Buffer States数据库使用内部算...
    99+
    2024-04-02
  • java 中Buffer源码的分析
    java 中Buffer源码的分析BufferBuffer的类图如下:除了Boolean,其他基本数据类型都有对应的Buffer,但是只有ByteBuffer才能和Channel交互。只有ByteBuffer才能产生Direct的buffe...
    99+
    2023-05-31
    java buffer源码 buf
  • Node.js Buffer中的encoding的示例分析
    这篇文章主要介绍了Node.js Buffer中的encoding的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。计算机最小的单位是...
    99+
    2024-04-02
  • MySQL主从复制的原理分析是怎样的
    这期内容当中小编将会给大家带来有关MySQL主从复制的原理分析是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、基本原理MySQL复制过程分成三步:1)、mast...
    99+
    2024-04-02
  • linux中page buffer cache的示例分析
    小编给大家分享一下linux中page buffer cache的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Page cache和buffer cac...
    99+
    2023-06-13
  • 怎样分析MySQL中锁的相关问题
    这篇文章给大家介绍怎样分析MySQL中锁的相关问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。锁分类:从对数据操作的粒度分 :表锁:操作时,会锁定整个表。行锁:操作时,会锁定当前操作行。从对数据操作的类型分:读锁(共...
    99+
    2023-06-22
  • Kubernetes Informer的示例分析是怎样的
    Kubernetes Informer的示例分析是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。熟悉Kubernetes的小伙伴们想必会有一窥源码的动机,领略大师的设...
    99+
    2023-06-19
  • mysql中change buffer的作用是什么
    MySQL中的change buffer是用来缓存对InnoDB表的插入、更新和删除操作的数据结构。它的作用是延迟对磁盘的写入操作,...
    99+
    2024-05-15
    mysql
  • mysql中change buffer的用法是什么
    在MySQL中,change buffer是一种缓冲池,用于延迟执行INSERT、UPDATE和DELETE操作的物理写入。当对表进...
    99+
    2024-05-15
    mysql
  • Linux的内存中Swap和Cache以及Buffer的介绍是怎样的
    Linux的内存中Swap和Cache以及Buffer的介绍是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 total:总内存大小。 used:已经...
    99+
    2023-06-15
  • 怎样进行mysql数据库的分析
    怎样进行mysql数据库的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、数据库是什么?数据库是管理数据的一类软件。对数据的管理体现在两个方面,第一是描述数据,即一条...
    99+
    2023-06-22
  • MySQL备份失败的问题分析和处理是怎样的
    本篇文章为大家展示了MySQL备份失败的问题分析和处理是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。今天和同事一起处理了一个奇怪的MySQL空间异常问题,从...
    99+
    2024-04-02
  • mysql中的Cache和Buffer的区别是什么
    mysql中的Cache和Buffer的区别是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。mysql Cache和Buffer区别有...
    99+
    2024-04-02
  • PHP+MYSQL的分页是怎样操作的
    本篇文章为大家展示了PHP+MYSQL的分页是怎样操作的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。寫php是簡單的事,但是分頁可困擾小弟好一陣子°因為手邊的書好...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作