当前位置: 首页 > news >正文

6.1 innoDb逻辑存储结构和架构-简介

InnoDB 是 MySQL 默认的存储引擎,以其强大的事务支持、崩溃恢复能力和高效的数据处理能力广受欢迎。本文从逻辑存储结构、内存架构、磁盘结构到后台线程,逐步剖析 InnoDB 的关键概念,帮助您更好地理解和应用。


1. 逻辑存储结构

InnoDB 的数据存储采用多层次的逻辑结构,具有极高的组织性和扩展性。

  • 表空间(Tablespace):InnoDB 数据存储的最高层次,负责组织数据文件。
  • 段(Segment):表空间的子单位,分为数据段(存储表数据)、索引段(存储索引)和回滚段。
  • 区(Extent):每个段由多个区组成,每个区包含 64 个连续的页(Page)。
  • 页(Page):InnoDB 数据存储的基本单位,默认大小为 16KB。
  • 行(Row):页中实际存储的记录数据。

1.1 特点

  • 分层结构使得数据管理更高效。
  • 页大小支持调整(4KB、8KB、16KB),以适应不同场景的需求。

1.2 逻辑存储结构图

在这里插入图片描述


2. 内存架构

内存架构是 InnoDB 高性能的核心部分。以下是主要组成部分及其作用:

2.1 缓冲池(Buffer Pool)

  • 简介:缓冲池是用于缓存表数据和索引的区域,占用 InnoDB 的大部分内存。
  • 作用:
    1. 减少磁盘 I/O:将数据和索引页缓存在内存中,减少磁盘读写。
    2. 脏页管理:修改后的页(脏页)被延迟写回磁盘,提高性能。

优化建议

  • 合理设置缓冲池大小(innodb_buffer_pool_size)。

  • 查看缓冲池命中率:

    SHOW ENGINE INNODB STATUS;
    

2.2 更改缓冲区(Change Buffer)

  • 简介:缓存对非唯一二级索引的修改操作,减少随机写磁盘的次数。
  • 作用:
    • 延迟写入:对二级索引的插入、更新和删除操作先缓存在更改缓冲区,后续批量写入磁盘。
    • 提升性能:在写密集型场景下效果显著。

2.3 自适应哈希索引(Adaptive Hash Index)

  • 简介:基于热点数据动态生成的哈希索引,用于加速等值查询。
  • 作用:
    1. 提高 B+ 树索引的查询效率。
    2. 减少多层索引节点的遍历。

查询是否开启

SHOW VARIABLES LIKE '%hash_index%';

2.4 日志缓存区

  • 简介:存储事务日志的内存区域。
  • 作用:
    1. 加速事务日志写入。
    2. 支持崩溃恢复。

查看相关参数

SHOW VARIABLES LIKE '%log_buffer_size%';
SHOW VARIABLES LIKE '%flush_log%';

innodb_flush_log_at_trx_commit 值的含义

  • 1:每次事务提交时立即写入磁盘,保证数据安全。
  • 0:日志保存在内存中,性能高但数据不安全。
  • 2:日志写入 OS 缓存,周期性刷盘,性能与安全性折中。

3. 磁盘结构

InnoDB 数据持久化依赖于磁盘结构,其设计确保了高效存储和事务一致性。

3.1 系统表空间

  • 简介:存储共享元数据、Undo 数据、事务日志等。
  • 作用:管理数据库的核心元数据。

查询指令

SHOW VARIABLES LIKE '%innodb_data_file_path%';

3.2 独立表空间(File-Per-Table Tablespaces)

  • 特点:每个表单独存储在一个 .ibd 文件中。
  • 优点:
    • 更灵活的备份和迁移。
    • 减少单个表空间的碎片。

3.3 通用表空间

  • 特点:支持多个表共享一个表空间。

  • 指令:

    • 创建表空间:

      CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.ibd' ENGINE=InnoDB;
      
    • 表指定表空间:

      CREATE TABLE employees (...) TABLESPACE ts1;
      

3.4 Undo 表空间

  • 作用:存储回滚信息。
  • 特点:在事务回滚和多版本并发控制(MVCC)中发挥重要作用。

3.5 临时表空间

  • 简介:存储临时表的数据,仅在会话期间有效。

3.6 双写缓冲区

  • 作用:防止写操作中断导致数据损坏。
  • 机制:
    • 数据页先写入双写缓冲区。
    • 双写缓冲区再将数据写入表空间。

3.7 Redo Log 重做日志

  • 作用:记录事务的物理变化,用于崩溃恢复。
  • 组成:
    • Redo Log Buffer:内存中的日志缓冲。
    • Redo Log File:磁盘上的日志文件。

4. 后台线程

InnoDB 依靠多个后台线程管理内存、磁盘和事务。

4.1 Master Thread

  • 作用:调度和执行主要后台任务,如脏页刷新和更改缓冲区合并。

4.2 IO Thread

  • 作用:处理磁盘 I/O 请求。
  • 分类
类型作用默认线程数量
Read Thread处理读请求(从缓冲池读取页)默认 4(可配置)
Write Thread处理写请求(刷新脏页到磁盘)默认 4(可配置)
Insert Buffer Thread合并插入缓冲区的更改1
Log Thread刷新事务日志到磁盘1

注:

  1. Read Thread 和 Write Thread
    • 数量:默认均为 4,负责处理 I/O 操作,适用于大规模的并发读写。
    • 可配置参数 :
      • innodb_read_io_threads:配置读线程数量。
      • innodb_write_io_threads:配置写线程数量。
    • 作用:这些线程负责从磁盘读取数据页(读线程)或将脏页写入磁盘(写线程)。
  2. Insert Buffer Thread
    • 数量:固定为 1,无法通过配置改变。
    • 作用:在插入数据时,合并更改到二级索引的缓冲区。
  3. Log Thread
    • 数量:固定为 1。
    • 作用:负责将事务日志从缓冲区刷新到磁盘文件(如 redo log 文件)。
    • 优化机制:
      • 使用了组提交(group commit),提高日志刷新效率。

查看引擎状态

SHOW ENGINE INNODB STATUS;

4.3 Purge Thread

  • 作用:清理不再需要的 Undo 数据,减少表空间占用。

4.4 Page Cleaner Thread

  • 作用:刷新脏页到磁盘,减少事务提交时的延迟。

通过对 InnoDB 存储引擎的深入了解,可以更有效地优化 MySQL 数据库性能,提高系统的稳定性和可靠性。

相关文章:

6.1 innoDb逻辑存储结构和架构-简介

InnoDB 是 MySQL 默认的存储引擎,以其强大的事务支持、崩溃恢复能力和高效的数据处理能力广受欢迎。本文从逻辑存储结构、内存架构、磁盘结构到后台线程,逐步剖析 InnoDB 的关键概念,帮助您更好地理解和应用。 1. 逻辑存储结构 InnoDB 的数据…...

C++看懂并使用-----回调函数

一)回调函数的定义 在 C 中,回调函数是一段作为参数传递给其他函数的可执行代码。它允许在一个函数内部的特定点调用外部定义的函数,以实现更灵活的功能。 回调函数(Callback Function)是一种通过函数指针或函数对象&a…...

构建短视频矩阵生态体系开发分享

短视频矩阵系统模型的技术开发是一个综合性强、复杂度高的工程项目,它涵盖了广泛的技术选择与架构规划。以下是该项目开发过程中的关键步骤和核心考虑因素: 需求分析阶段: 明确目标用户群体及其需求,以确保系统设计的针对性和实…...

qt QGraphicsScale详解

1、概述 QGraphicsScale是Qt框架中提供的一个类,它提供了一种简单而灵活的方式在QGraphicsView框架中实现缩放变换。通过设置水平和垂直缩放因子、缩放中心点,可以创建各种缩放效果,提升用户界面的交互性和视觉吸引力。结合QPropertyAnimati…...

CAD 文件 批量转为PDF或批量打印

CAD 文件 批量转为PDF或批量打印,还是比较稳定的 1.需要本地安装CAD软件 2.通过 Everything 搜索工具搜索,DWG To PDF.pc3 ,获取到文件目录 ,替换到代码中, originalValue ACADPref.PrinterConfigPath \ r"C:…...

Java基础面试题16:简述Servlet的体系结构

Servlet 是 JavaEE 技术中的一大核心组件,它运行在服务器端,用于处理客户端的请求并生成响应。如果你想深入了解它的体系结构,下面会用通俗的语言带你一步步搞懂。 1. Servlet API:开发者和容器沟通的桥梁 Servlet API 是开发 S…...

Web开发基础学习——理解React组件中的根节点

Web开发基础学习系列文章目录 第一章 基础知识学习之理解React组件中的根节点 文章目录 Web开发基础学习系列文章目录前言一、根节点的概念二、示例解释总结 前言 在 React 应用中,根节点(Root Node)是指 React 组件树的起始点,…...

【人工智能】探索自然语言生成(NLG):用GPT生成文本

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 自然语言生成(Natural Language Generation, NLG)是自然语言处理(NLP)领域的重要分支,旨在生成符合语法和语义的自然语言文本。近年来,基于深度学习的生成式预训练模型(GPT)在NLG任务中取得了巨大…...

挑战用React封装100个组件【004】

项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于展示图片的地方,提供了small,medium,large三种大小。可以删除图片,也可以全屏预览图片。 样式展示 前置依赖 今天我们的这个挑战需要用用到了…...

vue elementui layout布局组件实现规则的弹性布局

背景:遇到在一个容器里,采用弹性盒布局的时候,如果元素个数改变,元素的排列会错乱。 解决方式 方式一:之前遇到的时候,是采用计算元素个数的方式,采用透明元素补齐的方式(比如一个有…...

SpringBoot Web 开发请求参数

SpringBoot Web 开发请求参数 简单的 web 请求: @RestController public class HelloController {@RequestMapping("sayHello")public String sayHello(){System.out.println("Hello World");return "hello world";} }获取请求参数 简单参数…...

python7学习笔记-循环、迭代、pass

九九乘法表-while循环 right 1 while right < 9:left 1while left < right:print(f{left}x{right}{left * right},end\t)left 1print()right 1 # #效果&#xff1a; #1x11 #1x22 2x24 #1x33 2x36 3x39 #1x44 2x48 3x412 4x416 #1x55 2x510 3x515 4x520 5x525 #…...

LeetCode78:子集

链接&#xff1a;78. 子集 假设我们要求[1, 2, 3]的子集&#xff1a; 我们知道[1, 2]的子集是A&#xff1a; 而[1, 2, 3]就是比[1, 2]多了一个元素3&#xff1b;所以将3加入到上述A中的每个集合中&#xff0c;得到一个新集合B&#xff1a; 结论&#xff1a;[1, 2, 3]的子集就…...

Linux 安装scala

文章目录 Linux 安装scala下载环境变量配置 Linux 安装scala 前提linux需要已经安装好JDK&#xff08;JDK安装&#xff09;&#xff0c;Scala对JDK版本有明确的要求。通常&#xff0c;Scala的稳定版本要求JDK版本不低于1.8。例如&#xff0c;Scala 2.11.8和2.12.7版本都要求JD…...

重生之我在异世界学编程之C语言:深入指针篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文&#xff08;1&#xff09;内置数…...

linux centos7 yum命令失效

linux centos7 yum命令失效 Centos7使用yum命令失效&#xff0c;报错&#xff1a;Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infrastock error was 14: curl#6 - “Could not resolve host: mirrorlist.centos.or…...

mac访达打开终端

选择文件夹打开 选中文件夹&#xff0c;然后右键即可&#xff1a; 在当前文件夹打开 在访达的当前文件夹长按option键 左下角出现当前文件夹路径 右键即可打开终端...

【MySQL 进阶之路】索引的使用

5.索引的使用规则 在数据库管理系统&#xff08;DBMS&#xff09;中&#xff0c;索引是提高查询效率的关键机制之一。MySQL索引优化是指通过设计、调整和选择合适的索引策略&#xff0c;以提高数据库的查询性能和降低资源消耗。以下是一些关键的索引使用规则&#xff1a; 1. …...

网络编程相关 API 学习

目录 1. 网络编程中的基本概念 2. UDP 的 socket api 的使用 (1) DatagramSocket API (2) DatagramPacket API (3) InetSocketAddress API (4) 使用 UDP 的 socket api 3. TCP 的 socket api 的使用 (1) ServerSocket API (2) Socket API 1. 网络编程中的基本概念 客…...

python使用python-docx处理word

文章目录 一、python-docx简介二、基本使用1、新建与保存word2、写入Word&#xff08;1&#xff09;打开文档&#xff08;2&#xff09;添加标题&#xff08;3&#xff09;添加段落&#xff08;4&#xff09;添加文字块&#xff08;5&#xff09;添加图片&#xff08;6&#xf…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...

DeepSeek越强,Kimi越慌?

被DeepSeek吊打的Kimi&#xff0c;还有多少人在用&#xff1f; 去年&#xff0c;月之暗面创始人杨植麟别提有多风光了。90后清华学霸&#xff0c;国产大模型六小虎之一&#xff0c;手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水&#xff0c;单月光是投流就花费2个亿。 疯…...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...