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

相关推荐

  • 银氨溶液化学式,氨与氨气的化学式是什么

    技术银氨溶液化学式,氨与氨气的化学式是什么氨就是氨气…… 化学式 NH3 1银氨溶液化学式、物理性质 相对分子质量 17.031 氨气在标准状况下的密度为0.7081g/L 氨气极易溶于水,溶解度1:700 2、化学性质

    生活 2021年10月30日
  • js中setInterval和setTimeout区别和用法

    技术js中setInterval和setTimeout区别和用法 js中setInterval和setTimeout区别和用法setTimeout
    setTimeout() //- 在指定时间后执行代码

    礼包 2021年11月14日
  • mysql事务有哪些特性

    技术mysql事务有哪些特性小编给大家分享一下mysql事务有哪些特性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简介事务是由一组sql语句

    攻略 2021年12月11日
  • impunity,犬儒主义到底是什么意思

    技术impunity,犬儒主义到底是什么意思犬儒主义者百科名片“犬儒主义”一般认为是苏格拉底的弟子安提斯泰尼创立的,另一人物第欧根尼则因为住在木桶里的怪异行为而成为更有名的犬儒主义者。当时奉行这一主义的哲学家或思想家,他

    生活 2021年10月30日
  • 如何使用基于scriptsetup语法的vue3

    技术如何进行vue3基于script setup语法$refs的使用如何进行vue3基于script setup语法$refs的使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小

    攻略 2021年12月18日
  • Centos下安装mysql命令怎么写

    技术Centos下安装mysql命令怎么写这篇文章主要为大家展示了“Centos下安装mysql命令怎么写”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Centos下安装my

    攻略 2021年11月15日