MySQL innodb引擎架构分析- Double Write Buffer

news2024/10/6 22:25:23

文章目录

  • 系列文章目录
  • 前言
  • 一、Double Write Buffer是什么?
  • 二、Double Write Buffer步骤
    • 步骤
      • 对性能的影响
  • 总结


系列文章目录

1. MySQL innodb引擎架构分析-Buffer Pool
2. MySQL innodb引擎架构分析-Redo log
3. MySQL innodb引擎架构分析- Double Write Buffer


前言

MySQL的buffer一页的大小是16K,文件系统一页的大小是4K,也就是说,MySQL将buffer中一页数据刷入磁盘,要写4个文件系统里的页。MySQL内的页准备刷入磁盘,才刷了3个文件系统里的页,掉电重启后,物理上只有磁盘上的123页,数据完整性被破坏。如果能有一个“副本”,对原来的页进行还原,就能解决这类“页数据损坏”的问题,在MySQL中就是Double Write Buffer。
Redo Log无法修复这类“页数据损坏”的异常,修复的前提是“页数据正确.”并且Redo Log日志正常。innodb的redo log 不会记录完整的一页数据,因为这样日志太大,它只会记录那次(sequence)如何操作了(update,insert)哪页(page)的哪行(row)


一、Double Write Buffer是什么?

Double Write Buffer是mysql 系统表空间的一块存储区域,在系统中Double Write 分为了两个组成部分:内存中的double write buffer,物理磁盘上共享表空间中连续的128个页,即2个区(extent),大小同样为2MB。
在这里插入图片描述

二、Double Write Buffer步骤

步骤

在这里插入图片描述
(!图片来源百度)

在Innodb将数据页写到数据存储文件之前,存储从Innodb缓存池刷过来的数据页。且只有将数写入doublewriter buffer后,Innodb才会进行数据页的物理存储。如果在数据页写盘时发生操作系统、存储系统、或者myql进程中断,Innodb可以从doublewriter buffer存储中找回丢失的数据页备份。
第一步:页数据先memcopy到DWB的内存里;
第二步:DWB的内存里,会先刷到DWB的磁盘上;
第三步:DWB的内存里,再刷到数据磁盘存储上;

对性能的影响

Double Write Buffer在磁盘上是一块连续的物理空间,在内存中的数据刷盘到Double Write Buffer属于顺序追加写,速度很快;Innodb保存数据刷磁盘,随机写,本来就需要进行,不属于额外操作;第三方测评,评估约10%性能损失;


总结

如果系统本身数据要求没有那么高(比如日志数据库),Double Write Buffer双写是有一定的性能开销的。可以通过参数innodb_doublewrite = 0进行关闭,设置为1表示开启。官方认为,尽管需要写入两次数据,但是写缓冲区不需要两次的 io开销或操作,因为只需要调用一次操作系统的fsync() 就可以将批量数据顺序写入磁盘 -> 系统表空间的Double Write Buffer,这里是顺序写而不是随机写(性能可以保证),当然前提是配置刷盘策略参数innodb_flush_method为默认的O_DIRECT。
在实际生产种还可以用参数控制:
binlog_group_commit_sync_delay:组提交执行fsync() 延迟的微妙数,延迟时间越长批量数据越多,磁盘io越少性能越高。
binlog_group_commit_sync_no_delay_count:组提交执行fsync的批个数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java基于ssm+vue+elementUI实验报告管理系统

BS的实验报告管理系统是针对目前大学推广与交流的实际需求,从实际工作出发,对过去的实验报告管理系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准…

鸡血篇:网络工程师为什么要学Python,如何学Python

两个多月之前写了一篇“送给打算考IE,正在学网络,纠结要不要转行学网络的你们”的文章,意外地收到了不少小伙伴的私信,大多咨询如何学习网络工程,以及什么方向的IE更有前景之类的问题。其实IE的话题我不想再多说&#…

Redis缓存一致性问题

目录 1、背景 2、缓存读写模式 2.1、Cache-Aside Pattern(旁路缓存模式) 2.2、Read-Through/Write-Through(读写穿透模式) 2.3、Write Behind Pattern(异步缓存写入) 3、数据不一致的几种场景 3.1、先删缓存,再更新数据库 3.2、先更新…

豆瓣评分9.1!据说入门Python的人都读过

前言 你是否正在寻找一本适合初学者入门Python的书籍呢? 如果是,那你来对地方了,以我个人经验,开始学习一门新的编程语言是相当困难和耗时的,这也是我今天要和大家分享这本书的原因,不卖关子了&#xff0…

算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075)

算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2051 矩阵01变2. MT2052 矩形3. MT2053 切蛋糕4. MT…

面试怕问到缓存穿透?看这篇就够了

面试怕问到缓存穿透?看这篇就够了! 缓存穿透 缓存穿透指的是请求的数据在数据库和缓存中都不存在,这样缓存永远都不会生效,这些请求就会直接打到数据库中。 就比方说,你去查询一个商户,带着id为负数的参数…

艾美捷SAM甲基转移酶活性分析试剂盒使用前准备方案

关键生物分子和蛋白质的甲基化在许多生物系统,包括信号转导、生物合成、蛋白质修复、基因沉默和染色质调节。S-腺苷甲硫氨酸(SAM)依赖性甲基转移酶使用SAM ATP后最常用的酶辅因子。SAM,也称为AdoMet作为修饰蛋白质和DNA所需的甲基…

通俗理解决策树

目录前言决策树的结构决策树的构建信息增益(ID3算法)信息增益率(C4.5算法)基尼指数(CART算法)熵VS基尼指数剪枝优缺点及适用场景参考文献前言 从这一期开始,我们准备介绍一系列经典机器学习算法…

Linux:虚拟机配置免密登录和文件同步分发

记录下,以后照抄就好了 文章目录ssh免密登录SCP安全拷贝rsync同步修改xsync集群分发ssh免密登录 免密登录原理 生成公钥和私钥 ssh-keygen -t rsa后连敲三个回车 将公钥拷贝到要免密登录的目标机器上 遇到yes/no的都输入yes ssh-copy-id m1 ssh-copy-id m2 ssh-co…

JAVA毕业设计——基于Springboot+vue的校园二手交易和交流论坛系统(源代码+数据库)

github代码地址 https://github.com/ynwynw/stuSecond-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于Springbootvue的校园二手交易和交流论坛系统(源代码数据库)039 一、系统介绍 这是集校园二手交易、校园交流论坛、校园表白墙为一体的项目。分为…

Java基于微信小程序的新冠疫苗预约小程序 springboot+vue+elementUI

项目介绍 基于小程序的疫苗预约系统是计算机技术与疫苗管理相结合的产物,通过疫苗预约系统实现了对疫苗的高效管理。随着计算机技术的不断提高,计算机已经深入到社会生活的各个角落.而采用人工疫苗预约的方法,不仅效率低,易出错,手…

Python基础(十四):公共操作的讲解

文章目录 公共操作的讲解 一、运算符 1、+ 2、* 3、in或not in 二、公

面了个腾讯35k出来的,他让我见识到什么叫“精通MySQL调优”

始末 MySQL调优对于很多程序员而言,都是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能…

CN_@TCP可靠机制@差错控制@流量控制@拥塞控制

文章目录CN_TCP可靠机制差错控制流量控制拥塞控制TCP的可靠性机制序号确认窗口大小和累计确认🎈Window scaling重传超时冗余ACK(冗余确认快速重传)差错控制🎈TCP流量控制🎈接收窗口:拥塞窗口:发送窗口例例例1例2例3例例…

【Node.js】实现微信小程序订阅消息推送功能

实战项目名称:实现微信小程序订阅消息通知 文章目录一、实战步骤1. 登录微信小程序管理端,添加订阅消息模板2. 定义好需要发送的消息3.获取小程序的access_token4. 发起请求,向用户推送消息4. 小程序端添加接收订阅消息的按钮二、完整源代码三…

基于Python+Django的学生作业提交批改管理系统

在各学校的教学过程中,学生的作业管理是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及,“基于网络的学习模式”正悄无声息的改变着传统的教室学习模式,“基于网络的教学平台”的研究和设计也成为教育技术领域的热点课题。采用…

ZeroTier实现内网穿透详细教程,其实5分钟就可以搞定

想看更详细的视频教程,推荐到哔哩哔哩上看:强大的内网穿透工具ZeroTier,随时随地远程访问家中NAS和其它设备!没有公网IP也不怕_哔哩哔哩_bilibili 相信很多人都有远程连接家中设备的需求,如远程连接家中的NAS、Window…

基于JAVA的书舍管理系统的设计与实现

摘 要 随着图书馆规模的不断扩大,人流数量的急剧增加,有关图书馆的各种信息量也在不断成倍增长。面对庞大的信息量,就需要有书舍管理系统来提高图书馆工作的效率。通过这样的系统,我们可以做到信息的规范管理和快速查询&#xff…

python 算法加密

加密代码片段样例 文件名:iter_n.py import timedef iter_from_n(n):list_n []for index,value in enumerate(range(n)):list_n.append([index,value])return list_nif __name__"__main__":t1 time.time()iter_from_n(100000)t2 time.time()print (&…

精彩预告 | 美创科技与您线上相约第十三届中国数据库技术大会

12月14日~16日,由IT168联合旗下ITPUB、ChinaUnix两大技术社区主办的第13届中国数据库技术大会(DTCC2022)将在线上隆重召开。 作为一家在数据库技术领域深研探索十余年的厂商,美创科技持续专注推动数据库技术的发展与实践。此次大会…