InnoDB 磁盘结构之数据字典和双写缓冲区

news2024/11/17 21:20:52

数据字典(InnoDB Data Dictionary)

MySQL中,数据字典包括了: 表结构、数据库名或表名、字段的数据类型、视图、索引、表字段信息、MySQL版本信息、存储过程、触发器等内容

InnoDB数据字典由内部系统表组成,这些表包含用于查找表、索引和表字段等对象的元数据。元数据物理上位于InnoDB系统表空间中。在MySQL8.0之前由于历史原因,数据字典元数据在一定
程度上与InnoDB表元数据文件(.frm文件)中存储的信息重叠

在这里插入图片描述
注: MySQL8.0版本以后 将所有原先存放于数据字典文件中的信息,全部存放到数据库系统表中,即将之前版本的 .frm,.opt等文件都移除了,不再通过文件的方式存储数据字典信息

双写缓冲区 ( Doublewrite Buffer Files)

  • 什么是写失效 ( 部分页失效 )

    InnoDB的页和操作系统的页大小不一致,InnoDB页大小一般为16K,操作系统页大小为4K,InnoDB的页写入到磁盘时,一个页需要分4次写

    如果存储引擎正在写入页的数据到磁盘时发生了宕机,可能出现页只写了一部分的情况,比如只写了4K,就宕机了,这种情况叫做部分写失效(partial page write),可能会导致数据丢失
    在这里插入图片描述

  • 双写缓冲区 Doublewrite Buffer

    为了解决写失效问题,InnoDB实现了double write buffer Files, 它位于系统表空间,是一个存储区域

    在Buffer Pool的page页刷新到磁盘真正的位置前,会先将数据存在Doublewrite 缓冲区。这样在宕机重启时,如果出现数据页损坏,那么在应用redo log之前,需要通过该页的副本来还原该页,然后再进行redo log重做,double write实现了InnoDB引擎数据页的可靠性

    默认情况下启用双写缓冲区,如果要禁用Doublewrite 缓冲区,可以将 innodb_doublewrite 设置为0
    在这里插入图片描述

  • 数据双写流程
    在这里插入图片描述

    • step1:当进行缓冲池中的脏页刷新到磁盘的操作时,并不会直接写磁盘,每次脏页刷新必须要先写double write
    • step2:通过memcpy函数将脏页复制到内存中的double write buffer
    • step3: double write buffer再分两次、每次1MB, 顺序写入共享表空间的物理磁盘上, 第一次写
    • step4: 在完成double write页的写入后,再将double wirite buffer中的页写入各个表的独立表空间文件中(数据文件 .ibd), 第二次写
  • 为什么写两次 ?

    为啥写两次,刷一次数据文件保存数据不就可以了,为什么还要写共享表空间? 其实是因为共享表空间是在ibdbata文件中划出2M连续的空间,专门给double write刷脏页用的, 由于在这个过程中,double write页的存储是连续的,因此写入磁盘为顺序写,性能很高;完成double write后,再将脏页写入实际的各个表空间文件,这时写入就是离散的了

  • Change Buffer

    系统表空间中的change buffer是内存缓冲池中change buffer的备份,也就是说被持久化到了系统表空间中。在崩溃恢复的时候会从系统表空间的change buffer中读取信息到buffer pool

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

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

相关文章

7万字水利数字孪生工程解决方案(word可编辑)

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 1.1 系统开发方案 1.1.1 系统设计开发思路 (1)基于层次分解的设计 xxx水利数字孪生工程将采用基于层次分解的系统模型,系统采用这种方式进行层次划…

【P5】JMeter CSV Data Set Config(CSV 数据文件设置)

文章目录 一、测试计划演示二、CSV Data Set Config(CSV 数据文件设置)主要参数说明2.1、忽略首行:True2.2、是否允许带引号?:False2.3、遇到文件结束符再次循环?:False2.4、遇到文件结束符停止…

Apache 可能会出手接盘 Google Wave

尽管Google计划在明年终止Google Wave项目,但他们提供Wave in a Box开源项目允许你在自己的服务器上跑一个Google Wave服务玩。据The Register报道,Apache Software Group正在试图将Wave in a Box移植到目前的管理系统里。尽管目前还处于早期孵化阶段&am…

AI模型部署概述

心口如一,犹不失为光明磊落丈夫之行也。——梁启超 文章目录 :smirk:1. AI模型部署方法:blush:2. AI模型部署框架ONNXNCNNOpenVINOTensorRTMediapipe如何选择 :satisfied:3. AI模型部署平台 😏1. AI模型部署方法 在AI深度学习模型的训练中,…

链游“风暴之年”已来 一文解读Web3游戏的前生今世

链上世界进入游戏市场,让越来越多游戏厂商不由得感叹区块链游戏(简称“链游”)的风暴之年正在加速到来。如今,游戏活动转变了单一的休闲娱乐理念,逐渐走向Web3发展个性化、可定义的未来。 前不久,阿里云作为…

S3C6410 中的 irqdomain 之 gpio

文章目录 VIC domain 与 gpio domain 的硬件拓扑图描述linux cascaded irq domainlinux irq domain 实例VIC domain 与 gpio domain 的硬件拓扑语言描述VIC 与 INT_EINTx 的关系INT_EINTx 与 GPIO的关系INT_EINT0INT_EINT1INT_EINT2INT_EINT3INT_EINT4INT_EINT4 与 External in…

【Elasticsearch】DSL操作相关

文章目录 DSL操作索引操作新建索引查询索引查看所有索引删除索引 映射操作创建映射查看映射索引映射关联(同创建映射类似) 文档操作创建文档查询指定ID文档查询所有文档全局修改文档局部修改文档删除文档条件删除 数据搜索数据准备条件查询(match)多字段条件查询(multi_match)关…

VMware 虚拟机中 Linux 系统Centos7磁盘空间扩容(亲测)

1.修改虚拟机磁盘容量 例如之前虚拟机磁盘空间为30G,现要将磁盘容量设置为50G 打开虚拟机(必须处于关机状态),点击【编辑虚拟机设置】,然后点击【磁盘】,接着点击【扩展】,输入修改后的最大磁盘…

LangChain入门(二)-通过 Google 搜索并返回答案

GitHub - liaokongVFX/LangChain-Chinese-Getting-Started-Guide: LangChain 的中文入门教程LangChain 的中文入门教程. Contribute to liaokongVFX/LangChain-Chinese-Getting-Started-Guide development by creating an account on GitHub.https://github.com/liaokongVFX/La…

js实现继承属性和方法

js实现继承属性和方法 1 使用extends实现继承2 原型链继承3 组合继承4 寄生组合继承5 实例继承6 拷贝继承7 扩展7.1 函数中方法定义在函数内部、函数外、prototype上的区别7.2 class创建实例与构造函数创建实例 首先定义一个父类 function Animal (name, age) {this.name nam…

Java Web案例:实现用户登录功能

文章目录 零、本节学习目标一、纯JSP方式实现用户登录功能(一)实现思路(二)实现步骤1、创建Web项目2、创建登录页面3、创建登录处理页面4、创建登录成功页面5、创建登录失败页面6、编辑项目首页 (三)测试结…

【JavaEE】CSS基础知识

文章目录 1.CSS概念1.1CSS是干啥的?1.2基础语法规范1.2基础语法规范1.3引入格式✨内部样式表✨行内样式表✨外部样式(最常用的样式) 1.4代码风格✨样式格式✨样式大小写 2.选择器2.1选择器的功能2.2基础选择器有哪些?&#x1f6e0…

GPT 告诉你请求到达 Tomcat 是怎么处理的

tomcat如何监听请求到达 没有SpringMVC,tomcat 如何处理请求 Tomcat 线程池的作用是什么 如何配置tomcat 线程池 tomcat 线程池的主要任务是处理连接请求 tomcat线程池是怎么实现的 到这里可以看出来,tomcat线程池的实现方式也是通过ThreadPoolExecutor 实现 如何根…

Git 使用教程整理

一、配置Git 编码为utf-8 设置登陆账号 使用Git GUI操作 二、获取远程仓库代码 推荐使用使用 git bash 命令:git clone xxx git clone https://github.com/jeromeetienne/jquery-qrcode.git 其他参考:使用Git获取最新版本到本地_gitgui 获取新版本_天…

【Java开发】Spring Cloud 11 :Gateway 配置 ssl 证书(https、http 访问)

最近研究给微服务项目配置 ssl 证书,如此才可以对接微信小程序(需要使用 https 请求)。传统单体项目来说,首先往项目中添加证书文件,然后在配置文件中配置 ssl 证书路径、密码等相关信息;那么微服务这么多项…

高性能定时器--时间轮/多级时间轮

运行原理 指针指向轮子上的一个槽,轮子以恒定的速度顺时针转动,每转动一步就指向下一个槽(虚线指针指向的槽),每次转动称为一个tick,一个tick的时间称为时间轮的槽间隔slot interval,即心搏时间…

3。数据结构(2)

嵌入式软件开发第三部分,各类常用的数据结构及扩展,良好的数据结构选择是保证程序稳定运行的关键,(1)部分包括数组,链表,栈,队列。(2)部分包括树,…

JavaWeb_Web前端_Element组件库

JavaWeb_Web前端_Element组件库 快速入门安装ElementUI组件库引入ElementUI组件库添加组件并导入到根组件添加组件导入到根组件 Table 表格Pagination 分页Dialog对话框表单 案例Vue路由Vue类DeptView.vue动态视图组件请求链接组件 打包和部署打包打包按钮打包文件 部署部署静态…

OpenAI文本生成器-OpenAI文本生成器

openai自动批量写文章 如果您正在寻找一个能够自动生成高质量文章的工具,OpenAI 写文章就是您需要的推广神器。 OpenAI 写文章基于 OpenAI 最先进的语言模型技术,可以使用自然语言生成技术自动创作文章。只需在平台上提供少量的关键词或概念&#xff0…

Python每日一练:最长递增区间狄杰斯特拉(80分)K树(0分)

文章目录 前言一、最长递增区间二、狄杰斯特拉(80)三、K树(0)总结 前言 很显然,Python的受众远远大于C,其实笔者本人对Python的理解也是远强于C的,C纯粹是为了假装笔者是个职业选手才随便玩玩的…