如何浅析mysql中的double write

技术如何浅析mysql中的double write这篇文章给大家介绍如何浅析mysql中的double write ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。介绍double write之前我们

本文向您介绍如何在mysql中分析双写。内容非常详细,感兴趣的朋友可以参考一下,希望对你有所帮助。

在介绍双写之前,有必要了解一下偏页写问题:

InnoDB的页面大小一般为16KB,其数据校验也是针对这16KB计算的,数据写入磁盘的操作是基于Page的。但是,计算机硬件和操作系统,在极端情况下(比如断电),往往无法保证这种操作的原子性。当16K数据写入4K时,系统断电/os崩溃,只有一部分写入成功。在这种情况下,是部分页面写入问题。

很多DBA会认为系统恢复后,mysql可以根据redolog进行恢复,而MySQL在恢复过程中会检查页面的校验和,校验和是pgae的最后一个事务号。当发生部分页面写入问题时,页面损坏,页面中的事务号无法恢复。一 double write是什么?

双写是InnoDB在表空间上的128页(2个区域)是2MB;

其原理是:

为了解决部分页面写的问题,mysql在将脏数据刷新到数据文件时,首先使用memcopy将脏数据复制到内存中的双写缓冲区,然后用双写缓冲区将其分成两次,每次向共享表空间写入1MB。然后立即调用fsync函数,并将其同步到磁盘,以避免缓冲带来的问题。在这个过程中,双写是顺序写,成本不大。双重写入完成后,双重写入缓冲区被写入每个表空间文件,这是离散写入。

在极端情况下(断电),InnoDB再次启动后,发现一个Page数据已经损坏,这时可以从doublewrite缓冲区恢复数据。

双写有什么缺点?

位于共享表空间中的双写缓冲区实际上是一个文件。写DWB会导致系统中更多的fsync操作,硬盘的fsync性能会降低mysql的整体性能,但不会降低到原来的50%。这主要是因为:

1)双写是连接的存储空间,所以硬盘是按顺序写数据,而不是随机写,这样性能更高。

2)当数据从双写缓冲区写入实段时,系统会自动合并刷新连接空间的方式,一次可以刷新多个页面;三 double write在恢复的时候是如何工作的?

如果对doublewrite缓冲区本身进行了部分页面写入,则原始页面仍将位于磁盘的实际位置。-

-如果写入双写缓冲区本身失败,则数据不会写入磁盘。此时InnoDB会从磁盘加载原始数据,然后通过InnoDB的事务日志计算出正确的数据,再重新写入doublewrite缓冲区。

当InnoDB恢复时,它将使用原始页面,而不是双写缓冲区中损坏的副本。但是,如果双写缓冲区成功,而对页面真实位置的写入失败,InnoDB将在恢复期间使用双写缓冲区中的副本。

-如果双写缓冲成功写入,但磁盘写入失败,InnoDB不需要通过事务日志计算,而是直接用缓冲区的数据再次写入。

InnoDB知道页面何时损坏,因为每个页面的末尾都有校验和;校验和是最后要写入的内容,所以如果页面的内容与校验和不匹配,页面就会损坏。因此,在恢复时,InnoDB只读取双写缓冲区中的每一页,并验证校验和。如果页面的校验和不正确,它将从原始位置读取页面。

-恢复时,InnoDB直接比较页面的校验和。如果是错误的,则从硬盘加载原始数据,然后事务日志开始推导正确的数据。所以InnoDB的恢复通常需要很长时间。四 我们是否一定需要 double write ?

在某些情况下,双写缓冲区确实不是必需的——例如,您可能希望在从机上禁用它。此外,一些文件系统(如ZFS)自己也做同样的事情,所以InnoDB这样做是多余的。可以通过将InnoDB_doublewrite设置为0来禁用双重写入缓冲区。五 如何使用 double write

InnoDB_doublewrite=1表示启动双重写入

显示类似" InnoDB_dblwr% "的状态可以查询双重写入的使用情况;

相关参数与状态

双写的使用情况:

显示类似" %InnoDB_dblwr% "的状态;

InnoDB _ dblwr _ pages _ written从英国石油公司冲洗到DBWB的个数

InnoDB_dblwr_writes写文件的次数

每次写操作合并页,面,张,版的个数=InnoDB _ dblwr _ pages _ writed/InnoDB _ dblwr _ writes

关于如何浅析关系型数据库中的双重写入就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/95850.html

(0)

相关推荐

  • 关于爱情的英语句子,求一些英文的关于爱情的短句子。

    技术关于爱情的英语句子,求一些英文的关于爱情的短句子。哈哈这个我知道关于爱情的英语句子,我帮你吧~ 1我的世界不允许你的消失,不管结局是否完美. No matter the ending is perfect or no

    生活 2021年10月25日
  • 如何安装spark 2.2.0独立版并演示字数统计

    技术如何进行spark 2.2.0 Standalone安装及wordCount演示本篇文章为大家展示了如何进行spark 2.2.0 Standalone安装及wordCount演示,内容简明扼要并且容易理解,绝对能使

    攻略 2021年12月17日
  • 日本服务器租用适合端口转发的理由

    技术日本服务器租用适合端口转发的理由最近不少客户都来咨询用于端口转发服务比较适合的服务器,一般情况下我们都是推荐日本服务器或者香港服务器作为端口转发使用,下面就来简单介绍一下理由端口转发的用途是什么?
    端口转发对于IT专

    礼包 2021年12月8日
  • 微信小程序swiper组件怎么创建(微信小程序的wxss文件作用)

    技术微信小程序中的wxs模块怎么用这篇文章将为大家详细讲解有关微信小程序中的wxs模块怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。WXS的使用wxs是专门用于wxml页面的,它

    攻略 2021年12月19日
  • 实验二 数组、指针和c++标准库

    技术实验二 数组、指针和c++标准库 实验二 数组、指针和c++标准库实验任务5
    Info.hpp#ifndef INFO_HPP
    #define INFO_hpp#includeiostream
    #i

    礼包 2021年11月1日
  • oracle实例的内存结构(oracle实例由内存结构和什么组成)

    技术Oracle内存和架构知识点有哪些本篇内容介绍了“Oracle内存和架构知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,

    攻略 2021年12月22日