阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

突然断电,是否会影响Mysql的执行结果

287次阅读
没有评论

共计 1742 个字符,预计需要花费 5 分钟才能阅读完成。

导读 MySQL 采用 buffer 机制,避免每次读写进行磁盘 IO,提升效率,那么,问题来了,这个操作并非原子,如果执行到一半断电,会不会出现问题呢?

MySQL 采用 buffer 机制,避免每次读写进行磁盘 IO,提升效率:

  • 《​​缓冲池 (buffer pool​​)》
  • 《​​写缓冲 (change buffer)​​》
  • 《​​日志缓冲 (log buffer)​​》
  • MySQL 的 buffer 一页的大小是 16K,文件系统一页的大小是 4K,也就是说,MySQL 将 buffer 中一页数据刷入磁盘,要写 4 个文件系统里的页。

    突然断电,是否会影响 Mysql 的执行结果

    如上图所示,MySQL 里 page= 1 的页,物理上对应磁盘上的 1 +2+3+ 4 四个格。

    那么,问题来了,这个操作并非原子,如果执行到一半断电,会不会出现问题呢?

    会,这就是所谓的“页数据损坏”。

    突然断电,是否会影响 Mysql 的执行结果

    如上图所示,MySQL 内 page= 1 的页准备刷入磁盘,才刷了 3 个文件系统里的页,掉电了,则会出现:重启后,page= 1 的页,物理上对应磁盘上的 1 +2+3+ 4 四个格,数据完整性被破坏。

    画外音:redo 无法修复这类“页数据损坏”的异常,修复的前提是“页数据正确”并且 redo 日志正常。

    如何解决这类“页数据损坏”的问题呢?

    很容易想到的方法是,能有一个“副本”,对原来的页进行还原,这个存储“副本”的地方,就是 Double Write Buffer。

    Double Write Buffer,但它与传统的 buffer 又不同,它分为内存和磁盘的两层架构。

    画外音:传统的 buffer,大部分是内存存储; 而 DWB 里的数据,是需要落地的。

    突然断电,是否会影响 Mysql 的执行结果

    如上图所示,当有页数据要刷盘时:

  • 第一步:页数据先 memcopy 到 DWB 的内存里;
  • 第二步:DWB 的内存里,会先刷到 DWB 的磁盘上;
  • 第三步:DWB 的内存里,再刷到数据磁盘存储上;
  • 画外音:DWB 由 128 个页构成,容量只有 2M。

    步骤 2 和步骤 3 要写 2 次磁盘,这就是“Double Write”的由来。

    DWB 为什么能解决“页数据损坏”问题呢?

    假设步骤 2 掉电,磁盘里依然是 1 +2+3+ 4 的完整数据。

    画外音:只要有页数据完整,就能通过 redo 还原数据。

    假如步骤 3 掉电,DWB 里存储着完整的数据。

    所以,一定不会出现“页数据损坏”问题。

    画外音:写了 2 次,总有一个地方的数据是 OK 的。

    自己实验了几十次,仍没能复现“页数据损坏”,在网上找了一个“页数据损坏”时,MySQL 重启过程利用 DWB 修复页数据的图。

    突然断电,是否会影响 Mysql 的执行结果

    可以看到,启动过程中:

  • InnoDB 检测到上一次为异常关闭;
  • 尝试恢复 ibd 数据,失败;
  • 从 DWB 中恢复写了一半的页;
  • 能够通过 DWB 保证页数据的完整性,但毕竟 DWB 要写两次磁盘,会不会导致数据库性能急剧降低呢?

    分析 DWB 执行的三个步骤:

  • 第一步,页数据 memcopy 到 DWB 的内存,速度很快;
  • 第二步,DWB 的内存 fsync 刷到 DWB 的磁盘,属于顺序追加写,速度也很快;
  • 第三步,刷磁盘,随机写,本来就需要进行,不属于额外操作;
  • 另外,128 页 (每页 16K)2M 的 DWB,会分两次刷入磁盘,每次最多 64 页,即 1M 的数据,执行也是非常之快的。

    综上,性能会有所影响,但影响并不大。

    画外音:

  • write­-ahead-log 之所以性能高,就是因为顺序追加写;
  • 有第三方测评,评估约 10% 性能损失;
  • 更具体的,InnoDB 里有两个变量可以查看 double write buffer 相关的情况:

  • Innodb_dblwr_pages_written:记录写入 DWB 中页的数量。
  • Innodb_dblwr_writes:记录 DWB 写操作的次数。
  • 可以通过:

    show global status like "%dblwr%"

    来进行查询。

    突然断电,是否会影响 Mysql 的执行结果

    结尾

    MySQL 有很强的数据安全性机制:

  • 在异常崩溃时,如果不出现“页数据损坏”,能够通过 redo 恢复数据;
  • 在出现“页数据损坏”时,能够通过 double write buffer 恢复页数据;
  • double write buffer:

  • 不是一个内存 buffer,是一个内存 / 磁盘两层的结构,是 InnoDB 里 On-Disk 架构里很重要的一部分;
  • 是一个通过写两次,保证页完整性的机制;
  • 知其然,知其所以然。

    思路比结论重要,希望大家有收获。

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥玩云-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1742字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

    星哥玩云

    星哥玩云
    星哥玩云
    分享互联网知识
    用户数
    4
    文章数
    19348
    评论数
    4
    阅读量
    7801264
    文章搜索
    热门文章
    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
    我把用了20年的360安全卫士卸载了

    我把用了20年的360安全卫士卸载了

    我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
    阿里云CDN
    阿里云CDN-提高用户访问的响应速度和成功率
    随机文章
    星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

    星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

    星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...
    在Windows系统中通过VMware安装苹果macOS15

    在Windows系统中通过VMware安装苹果macOS15

    在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...
    支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

    支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

    支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
    免费领取huggingface的2核16G云服务器,超简单教程

    免费领取huggingface的2核16G云服务器,超简单教程

    免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...

    免费图片视频管理工具让灵感库告别混乱

    一言一句话
    -「
    手气不错
    开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

    开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

      开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
    手把手教你,购买云服务器并且安装宝塔面板

    手把手教你,购买云服务器并且安装宝塔面板

    手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
    告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

    告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

      告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
    国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

    国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

    国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
    星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

    星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

    星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...