《InnoDB引擎八》InnoDB关键特性-两次写

news2024/10/1 1:21:46

在这里插入图片描述

InnoDB 关键特性

  InnoDB存储引擎的关键特性包括:

  • Insert Buffer (插入缓冲)
  • Double Write (两次写)
  • Adaptive Hash Index (自适应哈希索引)
  • Async IO (异步IO)
  • Flush Neighbor Page (刷新领接页)

  这些特性为InnoDB存储引擎带来了更好的性能以及更高的可靠性。

两次写

如果说Insert Buffer带给InnoDB存储引擎是性能上的提升,那么doublewrite带给InnoDB存储引擎的是数据页的可靠性。

当数据库宕机时,可能InnoDB引擎正在写入某个页到表种,而这个页只写了一部分,比如16KB的页,只写了前4KB,之后就发生了宕机,这种情况被称为部分写时效(partial page write)。在InnoDB存储引擎未使用doublewrite技术前,曾经出现过因为部分写失效而导致数据丢失的情况。

或许大家会想到,如果发生写失效,可以通过重做日志进行恢复。但是必须清楚的认识到,重做日志中记录的是对页的物理操作,如偏移量800,写’aaa’记录。如果这个页本身已经发生了损坏,再对其进行重做是没有意义的。这就是说,在应用(apply)重做日志前,用户需要一个页的副本,当写入失效发生时,先通过页的副本来还原该页,再进行重做,这就是doublewrite。

doublewrite由两部分组成,一部分是内存中的doublewrite buffer,大小为2MB,另一部分是物理磁盘上共享表空间中连续的128个页,即2个分区,大小同样为2MB。在对缓冲池的脏页进行刷新时,不直接写磁盘,而是会根据memcpy函数将脏页先复制到内存中的doublewrite buffer,之后通过doublewrite buffer再分两次,每次1MB顺序写入共享表空间的物理磁盘上,然后马上调用fsynx函数,同步磁盘,避免缓存写带来的问题。在这个过程中,因为doublewrite页是连续的,因此这个过程是顺序写的,开销并不是很大。在完成doublewrite页的写入之后,再将doublewrite buffer中的页写入各个表空间文件中,此时写入则是离散的。可以通过以下命令观察到doublewrite运行的情况:

在这里插入图片描述


mysql> show global status like 'innodb_dblwr%'\G;
*************************** 1. row ***************************
Variable_name: Innodb_dblwr_pages_written
        Value: 9234
*************************** 2. row ***************************
Variable_name: Innodb_dblwr_writes
        Value: 1424
2 rows in set (0.00 sec)

可以看到,doublewrite一共写了9234个页,但实际写入次数为1424。如果发现系统在高峰时的Innodb_dblwr_pages_written:Innodb_dblwr_writes远小于,那么可以说明系统压力并不是很高。

如果操作系统在将页写入磁盘的过程中发生了崩溃,在恢复过程中,InnoDB存储引擎可以从共享表空间中的doublewrite中找到该页的一个副本,将其复制到表空间文件,再应用重做日志。

注意:如果用户需要统计数据库生产环境中写入的量,最安全的方法是根据Innodb_dblwr_pages_written来进行统计,这在所有版本的MySQL数据库中都是正确的。

参数skip_innodb_doublewrite可以禁止使用doublewrite功能,这时可能会发生前面体积的写失效问题。不过如果用户由多个从服务器(slave),需要提供较快的性能,也许可以通过启用这个参数。不过对于需要提供高可靠的主服务器(master),任何时候用户都应该确保开启doublewrite功能。

注意:有些文件系统本身就提供了部分写失效的防范机制,如ZFS文件系统。在这种情况下,用户就不需要开启doublewrite了。

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

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

相关文章

STM32 定时器单脉冲模式的使用记录

一、我要解决的问题 我的需求 需要单片机几乎同时在A,B,C 三个IO 分别输出T1,T2,T3 时长的高电平,时间结束后,恢复低电平。 初步思路 面对这个需求,我第一时间想到的是用三个定时器,分别设置T1,T2,T3 时…

Win10解决:系统管理员已阻止你运行此应用

前言 Win10安装msi软件包时出现错误提示如下: 解决 按【winR】快捷键打开运行,输入gpedit.msc回车依次进入”Windows设置“—”安全设置“—”本地策略“–”安全选项“—”用户账户控制:以管理员批准模式运行所有管理员“—双击&#xf…

JUC系列(六) 线程池

📣 📣 📣 📢📢📢 ☀️☀️你好啊!小伙伴,我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 📒 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️,擅…

若依 数据权限图文详细理解及改造

数据权限 所谓数据权限,就是根据不同角色的登录用户,查看不同的列表数据 若依数据权限 若依的数据权限也是基于角色实现的,支持五种权限模式,按权限大小一次排列: 全部数据权限,表示拥有所有部门的数据…

远程办公:通过cpolar内网穿透,远程桌面控制家里公司内网电脑

疫情反反复复的当下,有时候会遇到需要居家办公的情况,但在办公室的电脑上仍有很多重要资料需要存取,且办公室所在的局域网中也有很多相关资源需要被访问(如文件共享服务器、OA系统等)。如何能在家通过远程处理好办公事…

Blend for Visual Studio 概述

https://learn.microsoft.com/zh-cn/visualstudio/xaml-tools/creating-a-ui-by-using-blend-for-visual-studio?viewvs-2022 Blend for Visual Studio 可用于设计基于 XAML 的 Windows 和 Web 应用程序。 它提供了与 Visual studio 相同的基本 XAML 设计体验,并添…

长安汽车董事长下场宣传原力技术 全擎引领电动化出行普及时代

11月30日,长安汽车董事长朱华荣在朋友圈发布了长安汽车擘画未来的全新能源及电动化解决方案:长安原力技术——原力智能增程、原力超集电驱。长安汽车成为业内首个通过微信朋友圈发布全新技术方案的车企。短短的3分钟视频,展露着长安汽车对技术…

Mand Mobile - 滴滴出品的适用于金融项目的 Vue 移动端 UI 组件库,免费开源、灵活快速、丰富实用

推荐一款可用性很强的移动 UI 组件库,交互细致,有不少直接就可以用的金融行业的组件。 关于 Mand Mobile Mand Mobile 是一款由滴滴前端团队出品、专为金融场景设计的移动端 Vue 2 组件库,可以帮助前端开发者快速构建项目,UI 风…

ShaderLab实现序列帧动画

序列帧动画介绍 序列帧动画的原理比较简单,依次播放一系列关键帧图像,当播放速度达到一定数值时,看起来就是一个连续的动画。 序列帧动画有很多实现方式,而通过Shader来实现是性能比较好的一种,是由GPU来进行计算。 效果如下 我们使用一张8x8的纹理图片来实现帧动画 步…

单相半波可控整流电路仿真设计(任务书+lunwen+MATLAB仿真源文件)

目 录 摘 要 4 关键字 4 ABSTACT 5 Key words 5 1 绪论 7 1.1半波整流简介 7 1.2 本文研究的内容 7 1.3 单相半波可控整流电路建模与基本参数 7 2 单相半波可控整流电路(电阻性负载) 10 2.1 电路的结构与工作原理 10 2.2 Matlab下的模型建立 10 2.3 仿真…

使用字典映射关系格式化输出字符串format_map()方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 使用字典实现格式化输出 format_map()方法 [太阳]选择题 以下python代码输出正确的一项是? s1姓名:{name},职业:{job} dict1{name:张三,job:学生} print(…

MP5705 底板 用户手册

一、开发板简介1.1 产品简介 MP5705开发板底板适配本公司相关核心板,型号为MP5650(详见MP5650用户手册)。通过核心板底板的模式来设计组成完整的开发。底板与核心板采用4个120pin高速板间连接器对插,型号为PANASONIC公司的AXK5A2…

PCL 曲率计算

一、曲率 点云的曲率及计算_点云侠的博客-CSDN博客_点云曲率计算 曲率是曲线弯曲程度的一个度量。 曲率的分类&#xff1a; 1、主曲率、平均曲率、高斯曲率 主曲率&#xff1a; 主曲率计算源码&#xff1a; // template <typename PointInT, typename PointNT, typen…

在低容错业务场景下落地微服务的实践经验

作者&#xff1a;禾连健康 “健康体检是一个低容错的场景&#xff0c;用户到医院体检&#xff0c;由于 IT 原因导致无法完成预约的项目&#xff0c;会对用户体验造成极大的影响。”* ——禾连健康 CTO 邓志豪 禾连健康成立于 2014 年&#xff0c;是一家从体检场景切入的健康管…

Proxmox虚拟环境搭建

一、Proxmox VE简介 ProxmoxVE 是一个完整的、开源的企业虚拟化服务器管理平台。它在单个平台上紧密集成了 KVM 管理程序和 Linux 容器(LXC)、软件定义的存储和网络功能。通过集成的基于 web 的用户界面&#xff0c;您可以轻松地管理虚拟机和容器、集群高可用性或集成的灾难恢…

界面控件DevExtreme——轻松将TreeList数据导出为PDF格式

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序&#xff0c;该套件附带功能齐…

DevOps的流程与规范介绍

在DevOps中想要实现快速、高质量的业务交付&#xff0c;流程和规范是至关重要的。流程包含软件从需求提出到产品上线投产全套生命周期的所有环节&#xff0c;如需求提出、代码提交、上线流程等。规范包含敏捷需求分解规范、用户故事编写规范、需求输出表等。 一、流程 流程用…

[附源码]计算机毕业设计游戏交易平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

链表高频笔试的OJ题

文章目录 一、合并两个有序链表 解题代码 二、反转链表 解题代码 三、分割链表 解题代码 四、链表的回文结构 解题代码 五、链表相交 解题代码 六、环形链表 解题代码 七、复制带有随机指针的复制链表 解题代码 一、合并两个有序链表 题目来源&#xff1a;牛客网。 题目难度&a…

公共用房管理系统有哪些功能和范围?

数图互通房产管理 数图互通公共用房管理系统的管理功能和范围包括: 1、对全部公房进行图形化、电子化、规范、动态化管理。 2、房屋数据定义:可对校区、片区、建筑物、楼层、房间数据进行增删改查&#xff0c;对房间属性数据进行批量修改。 3、档案及多类型附件管理:可对房…