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

    生活 2021年10月30日
  • 张飞穿针的歇后语是什么,大眼瞪小眼”比喻什么意思

    技术张飞穿针的歇后语是什么,大眼瞪小眼”比喻什么意思有一次,张飞正要率军出发,却被 夫人叫住,拿出一根绣花针,一根红纱 线,非要张飞帮她把线穿上才能走。张飞听了哈哈大笑:“穿针引线,虽是 女人干的活,但也难不住我张飞穿针

    生活 2021年10月27日
  • docker安装部署redis用docker-compose启动设置密码

    技术docker安装部署redis用docker-compose启动设置密码 docker安装部署redis用docker-compose启动设置密码搜索镜像
    [root@localhost ~]# d

    礼包 2021年11月26日
  • 纯技术每日一题

    技术纯技术每日一题 纯技术每日一题纯技术每日一题
    一、11/4 (token、过期、分布式、多个节点多次调用)
    业务背景小猛同学正在压测,发现个小问题,因为在终端设备上跟鹅厂有紧密合作,调用他们的接口时

    礼包 2021年11月5日
  • 怎么解决数据库中的bash: warning: setlocale问题

    技术怎么解决数据库中的bash: warning: setlocale问题这篇文章主要讲解了“怎么解决数据库中的bash: warning: setlocale问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟

    攻略 2021年11月16日
  • Android输入法弹窗bug怎么处理

    技术Android输入法弹窗bug怎么处理小编给大家分享一下Android输入法弹窗bug怎么处理,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言最近发现一个bug,在项目中的某个界面,每当弹出输入法

    攻略 2021年10月27日