MySQL那些事(InnoDB架构和存储结构)

news2024/11/6 3:02:18

目录

  • 一、序言
  • 二、InnoDB架构
  • 三、InnoDB内存结构
    • 1、Buffer Pool (缓冲池)
    • 2、Change Buffer
    • 3、Log Buffer
  • 四、InnoDB磁盘结构
    • 1、表空间
    • 2、Doublewrite Buffer(双写缓冲区)
    • 3、Redo Log
    • 4、Undo Log
  • 五、结语

一、序言

本节内容为博主根据MySQL 8.0版本官方文档手动翻译过后的最新内容,并加上自己的经验对InnoDB的理解。


二、InnoDB架构

下面这张图是从官方文档上捞过来的架构图,可以看到InnoDB的架构主要分为两部分,一部分是内存结构,还有一部分是磁盘结构。
InnoDB架构图


三、InnoDB内存结构

从上面的架构图中可以看出,InnoDB内存结构主要分为Buffer Pool、Change Buffer和Log Buffer三部分,下面我们具体聊聊这3个部分的作用。

1、Buffer Pool (缓冲池)

Buffer Pool从名字其实就可以看出是一片内存区域,该区域会缓存表和索引数据。通过Buffer Pool可以直接在内存里频繁处理使用到的数据。在专用服务器上,80%的物理内存会被分配到Buffer Pool中。

为了提高大容量读操作的效率,Buffer Pool会被划分为多页(page)来保存行数据。Buffer Pool的实现其实是一个链表,链表上为访问的页数据。

备注:page是一个数据单位,代表InnoDB每次从磁盘读取到内存中的的数据量,每个page可以包含一行或者多行数据。

Buffer Pool会用LRU算法(变体)去管理链表上的数据,当往Buffer Pool中插入新的page时,最近最少使用的page会被添加到链表的中间。

这种中点插入策略会把链表拆分为两个子链表,如下:
Buffer Pool数据结构
可以看到,链表主要分为两部分:

  • 头部是最近被访问的子链表,我们称之为新页(young pages)。
  • 尾部是最近很少被访问的子链表,我们称之为旧页(old pages)。

这种LRU变体算法会将受大量查询影响的page放在new sublist,而old sublist则包含更少使用的page。

当InnoDB从磁盘中读取数据到Buffer Pool中时,首先会将读取到的page插入到两个链表的中间位置(old sublist的头部),访问old sublist的page时,page会被标记为young,该page将会被移到Buffer Pool中的头部(new sublist的头部)。

当有数据库操作时,Buffer Pool中没有被访问到的page会被移到链表的尾部,如果该page依然没有被用到就会被清除掉。

2、Change Buffer

Change Buffer是一种特殊的数据结构,它会缓存对二级索引页的修改,这些修改主要来自于DML语句,比如INSERTUPDATEDELETE
在这里插入图片描述
对于不在Buffer Pool中的二级索引页的修改将被缓存到change buffer中,当二级索引页被读取到Buffer Pool中时,这些修改将会被周期性地合并到Buffer Pool中。

3、Log Buffer

Log Buffer是一片内存区域,这片区域会保存写到日志文件的数据。Log Buffer的大小默认为16MB,里面的数据会周期性的刷新到磁盘中。

Log Buffer越大,支持运行的事务也就越大,大的log buffer可以减少redo log数据频繁刷新到磁盘。如果事务中包含了大量数据行的DML操作,增加Log Buffer的大小可以减少磁盘I/O。


四、InnoDB磁盘结构

InnoDB磁盘结构主要包含索引表空间Doublwrite BufferRedo LogUndo Logs,下面我们具体讲讲后面几项的作用。

1、表空间

表空间主要分为系统表空间File-Per-Table表空间General表空间Undo表空间临时表空间

  • 系统表空间:针对Double write buffer和Change buffer的一块存储区域。如果表建立在系统表空间内,那么也会包含表和索引的数据。
  • File-Per-Table表空间:过去InnoDB都是把表数据存储在系统表空间内,这种方式适用于专门用于数据库处理的机器,而File-Per-Table允许每个表数据都可以存储在自己的表空间数据文件里(.ibd文件)。默认都是用这种方式存储表数据。
  • General表空间:共享表空间,可以通过CREATE TABLESPACE语法创建共享表空间。
  • Undo表空间:该表空间包含undo日志,通过该日志可以撤销事务对聚簇索引数据的最新修改,即我们常说的数据回滚。
  • 临时表空间: 除了用于存放临时表数据,还会保存对临时表修改的回滚段。

2、Doublewrite Buffer(双写缓冲区)

双写缓冲区是位于系统表空间内的一块存储区域,InnoDB会在该存储区域完成Buffer Pool中已刷新的page写入。

为什么说叫做双写缓冲区呢?因为数据页在落地数据文件前,首先会往双写缓冲区写入数据,用来保证数据的完整性。

3、Redo Log

Redo log是一种基于磁盘的数据结构,主要用于未完成事务的数据恢复。Redo Log会编码更新表数据的请求,未完成更新数据文件的修改在数据库初始化期间自动重放。

默认情况下,Redo Log在磁盘上分为两个文件:ib_logfile0ib_logfile1,MySQL将会循环写入数据到redo log文件中。

4、Undo Log

Undo log是与单个读写事务相关联的Undo log日志记录的集合,该日志会包含如何撤销事务最新修改的一些信息。

一个事务最多分配4个undo日志文件,每个日志文件对应的操作类型如下:

  • 对表的INSERT操作。
  • 对表的UPADATE和DELETE操作。
  • 对临时表的INSERT操作。
  • 对临时表的UPADATE和DELETE操作。

五、结语

本篇文章比较偏概念性,好让大家对InnoDB的内存结构和磁盘结构有个大概的了解,更加详细的内容以及相关MySQL参数设置参考MySQL 8.0官方文档。

下一节我们将具体聊聊MySQL中InnoDB和MyISAM存储引擎的区别。

在这里插入图片描述

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

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

相关文章

pycharm 配置篇

方法注释 使用方式为,在方法名下方输入三个双(单)引号,回车,自动生成。五种风格的样式如下: def docstrings_func_plain(parm_a, parm_b, parm_c):"""Plain 风格"""def docs…

笔记本电脑如何改ip地址:操作指南与注意事项

在信息时代的浪潮中,网络已成为我们日常生活与工作中不可或缺的一部分。对于笔记本电脑用户而言,IP地址作为设备在网络中的唯一标识,其重要性不言而喻。无论是出于网络安全、网络测试还是特殊网络环境等需求,了解如何修改笔记本电…

NVIDIA Hopper 架构深入

NVIDIA Hopper 架构 GPU 的重要新功能。 文章目录 一、Transformer engine 变压器发动机二、第四代 NVLink 和 NVLink 网络三、第三代 NVSwitch四、New NVLink Switch System 新的 NVLink 开关系统五、PCIe Gen 5 PCIe 第 5 代一、Transformer engine 变压器发动机 Transforme…

java给word设置复选框

poi设置 使用"Wingdings 2" 字体 WordUtil.appendText(paragraph, "\uF052", "Wingdings 2",null); WordUtil.appendText(paragraph, "□", null);选中的复选框: poi导出pdf的时候正常使用aspose-words导出pdf就空了 使用默认字体…

给自己的项目(vue3)中添加 下雪/樱花飘落的背景

查看更佳效果前往我的博客, 可切换 snows_ls BLOGhttp://124.223.41.220/ 0、效果图 樱花飘落 雪花飘落 1、安装 yarn add jparticles / npm i jparticles 2、引入 import { Snow } from jparticles; // 引入粒子效果库 引入雪花效果库 3、使用 在项目中的app.…

onnx TRT 版本对应关系

Onnx 版本和opset 关系 https://github.com/onnx/onnx/blob/main/docs/Versioning.md Onnx runtime 对应 onnx opset 版本 Compatibility | onnxruntime Tensor RT 和onnx 支持版本可以看如下并选择对应分支 https://github.com/onnx/onnx-tensorrt/blob/release/8.4-GA/doc…

企业内训|AI助力智能办公与职场效能提升-青岛某国资平台

9月25日,TsingtaoAI派驻讲师进驻现场,为青岛市某国资平台公司员工交付“AI助力智能办公与职场效能提升”企业内训,整个培训通过AIGC的实际应用案例,帮助学员掌握智能办公的常用工具,提升工作流程优化和决策效率。课程涵…

衡石分析平台系统管理手册-智能运维之软件授权

软件授权​ 在设置->软件授权页面可以看到授权时间、有效期、用户上限、请求码、租户数上限、租户内用户数上限。 请求码是衡石系统用于生成注册码的一段代码,安装衡石系统后,就会自动生成一个请求码,其中包含了本机的指纹信息和当前 Lic…

BFS 解决 FloodFill 算法

BFS 解决 FloodFill 算法 题目一: 图像渲染1. 题⽬链接:2. 题⽬描述:3. 算法思路:4.代码 题目二: 岛屿数量1. 题⽬链接:2. 题⽬描述:3. 算法思路:4.代码 题目三:被围绕的…

Android Stuido中编译信息出现乱码的解决方式

打开菜单File -> Settings,选择Editor -> File Encodings 窗口,将编码设置为正确的字符集,保证 Global Encoding、Project Encoding 和 Default Encoding for properties files 都设置为 UTF-8。

物联网(二)——MDPI特刊推荐

特刊征稿 01 期刊名称: Application of IoT on Manufacturing, Communication and Engineering 截止时间: 摘要提交截止日期:2025年4月30日 投稿截止日期:2025年6月30日 目标及范围: 感兴趣的主题包括但不限于以…

Python输入输出

1、输出 python中变量的输出,print 会自动在行末加上回车,如果不需回车,只需在print语句的结尾添加一个逗号”,“ 1.1、普通输出 print(hello)1.2、格式化输出 1.2.1、使用%来格式化 格式化符号大全 符 号描述%c格式化字符及其ASCII码%s格式化字符…

Visual Studio C# 编写加密火星坐标转换

Visual Studio C# 编写加密火星坐标转换 1、WGS84坐标转GCJ02火星坐标2、GCJ02火星坐标转WGS84坐标(回归计算)3、GCJ02火星坐标转BD09百度坐标4、BD09百度坐标转GCJ02火星坐标(回归计算)5、坐标公共转换类6、地图显示7、程序简单界…

Databend 实现高效实时查询:深入解读 Dictionary 功能

作者:洪文丽 开源之夏2024“支持 External Dictionaries”项目参与者 东北大学软件工程专业云计算方向大二在读,喜欢挑战自我,尝试新鲜事物 背景介绍 在大型系统中,数据通常存储在多个不同的数据源中,例如 PostgreSQL…

【设计模式-职责链】

定义 职责链模式是一种行为设计模式,**它通过将请求发送给链上的多个处理者来避免请求发送者与处理者之间的紧密耦合。每个处理者可以选择处理请求或将其传递给链中的下一个处理者。**这样,可以将处理请求的责任链式组织,从而实现更灵活的请…

LeetCode 面试经典150题 66.加一

题目:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 思路: 代码&…

winform 中 panel 中添加可视对象错位问题

今天在写程序的时候,发现动态添加到panel_wokrarea中的按钮,同样是posx0,有时并不能对齐,会和当前窗口中panel_wokrarea在屏幕上的显示区域的最左边(panel_wokrarea很宽) 经分析,是因为panel 在…

828华为云征文 | 华为云Flexus X实例在混合云环境中的应用与实践

目录 前言 1. 混合云环境的优势与挑战 1.1 混合云的优势 1.2 混合云的挑战 2. Flexus X实例的配置与集成 2.1 Flexus X实例简介 2.2 Flexus X实例的混合云部署 2.3 配置步骤与措施 3. 数据迁移与同步策略 3.1 数据迁移方案 3.2 数据同步措施 4. 安全性与合规性管理…

我们用等距投影制作了一个动画视频

一家国际网络安全公司委托我们制作一部关于其网络安全产品的解释性视频。为了有效传达产品的价值给潜在客户和利益相关者,我们决定采用等距投影技术制作动画视频。等距投影是一种复杂的视觉呈现方式,它能够让人物和物体看起来具有三维效果,而…

FileLink跨网文件交换|解决网络隔离导致的文件共享难题

在现代企业的运营中,跨网文件交换已经成为一个重要的需求。然而,网络隔离和安全政策往往使得文件共享变得困难。FileLink作为一种创新的解决方案,旨在有效应对这些挑战,提升文件共享效率。 一、网络隔离的挑战 网络隔离常常是出于…