如何浅析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)

相关推荐

  • python发qq消息轰炸虐狗好友思路分析

    技术python发qq消息轰炸虐狗好友思路分析本篇内容介绍了“python发qq消息轰炸虐狗好友思路分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希

    攻略 2021年11月4日
  • 电脑手机互传文件,手机同电脑怎么互传文件

    技术电脑手机互传文件,手机同电脑怎么互传文件日常生活中,我们经常会遇到手机和电脑互传文件的场景,可以使用传统的数据线传送方法,也可以使用软件进行传输电脑手机互传文件。方法一:使用数据线一直都是使用手机和电脑进行文件传输的

    生活 2021年10月24日
  • css3实现平移效果的属性是(css3中实现平移效果的属性)

    技术在css3中可以实现平移效果的属性是哪个这篇文章给大家分享的是有关在css3中可以实现平移效果的属性是哪个的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在cs

    攻略 2021年12月15日
  • 什么是js递归函数调用

    技术什么是js递归函数调用这篇文章主要介绍“什么是js递归函数调用”,在日常操作中,相信很多人在什么是js递归函数调用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是js递归函数调用”

    攻略 2021年11月5日
  • JVM堆外内存泄漏故障排查的示例分析

    技术JVM堆外内存泄漏故障排查的示例分析本篇文章为大家展示了JVM堆外内存泄漏故障排查的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 前言记录一次线上JVM堆外内存泄漏

    攻略 2021年10月23日
  • 如何进行JavaScript数据扁平化分析

    技术如何进行JavaScript数据扁平化分析如何进行JavaScript数据扁平化分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是

    攻略 2021年12月4日