✅深入理解InnoDB中的页分裂与页合并

news2024/9/19 19:21:32

想要了解什么是页分裂,页合并,那么就要想知道 InnoDB 中的数据页是什么。

InnoDB 的数据页

InnoDB 的数据页是存储引擎中用于保存数据的基本单位。每个数据页是磁盘上的一个连续区域,通常大小为 16KB,当然,这个大小可以通过配置进行调整。这意味着 InnoDB 在读取和写入时,每次以 16KB 为单位进行操作。无论是从磁盘到内存的读取,还是从内存到磁盘的持久化写入,最小的操作单位都是 16KB。

B+树的每个节点都对应一个数据页,包括根节点、非叶子节点和叶子节点。B+树通过节点之间的指针连接了不同层级的数据页,从而构建了有序的索引结构。

image.png

通过 B+树的搜索过程,可以从根节点开始逐层遍历,最终到达叶子节点,从而找到所需的数据行。

因此,数据页是实际存储数据行的物理空间单位,通过页的方式进行磁盘读写操作。B+树通过节点和指针的组织,构建了层次结构的索引,用于快速定位和访问数据行。

在 B+树中,非叶子节点对应着数据页,其中存储了主键及指向子节点(即其他数据页)的指针。叶子节点则包含了实际的数据行,每个数据行存储在一个数据页中。

通过这种结构,InnoDB 利用 B+树和数据页的结合,实现了高效的数据存储和检索。B+树提供了快速的索引查找能力,而数据页则提供了实际管理和存储数据行的机制。它们相互配合,使得 InnoDB 能够高效处理大规模数据的访问需求。

数据页的构成

一个数据页包含了多个部分,包括文件头、页头、最小记录、最大记录、用户记录、空闲空间、页目录和文件尾。

image.png

什么是 InnoDB 的页分裂和页合并

正如,如上所说。InnoDB 的数据页是存储引擎中用于保存数据的基本单位,通常大小为 16KB。B+树的每个节点对应着一个数据页,包括根节点、非叶子节点和叶子节点。B+树通过节点之间的指针连接了不同层级的数据页,从而构建了有序的索引结构。

我们知道,B+树是按照索引字段建立的,并且在 B+树中是有序的。然而,如果索引字段的值并不是连续的,那么在 B+树的结构中会如何呢?

image.png

假设现在我们要插入一个索引值为 3 的新记录,它需要按顺序插入到页号为 20 的数据页中,放在索引值为 1 和 2 的记录之后。如果页号 20 已经满了,就会触发一次页分裂操作。

页分裂是指将一个数据页中的部分索引记录移动到一个新的数据页中,以便为新记录腾出空间。这种操作有助于保持 B+树的平衡和性能。

以下,就是一次页分裂的过程:

image.png

在向 InnoDB 中添加数据时,如果索引是随机无序的,这可能导致页分裂的发生。页分裂是指将一个数据页中的部分索引记录移动到新的数据页中,以便为新记录腾出空间。这种操作可能会导致连锁反应,从叶子节点一直向根节点传播分裂。

与分裂相对应的是合并操作。在 InnoDB 中,当一个索引页面中的索引记录被删除后,页面可能会变得过于稀疏。为了节省空间和提高性能,可能会触发页合并操作,将相邻的数据页合并为一个较大的数据页。

这些页的动态调整操作,即分裂和合并,有助于保持 B+树的平衡和优化存储结构,从而提高查询效率和整体性能。

页合并是指将两个相邻的索引页面合并成一个更大的页面,以减少 B+树的层级,从而优化存储结构并提高查询性能。

image.png

页分裂(合并)的危害

首先,页分裂和合并涉及大量的数据移动和重组操作。频繁进行这些操作会增加数据库的 I/O 负担和 CPU 消耗,从而影响数据库的整体性能。

分裂和合并可能会导致 B+树索引结构频繁地进行调整,这会影响插入和删除操作的性能。

频繁的页分裂和合并还可能导致磁盘上存在较多的空间碎片。新分出的数据页通常会有大量的空闲空间,这会导致数据库表占用更多的磁盘空间,造成资源浪费。

如何避免页分裂

至于如何避免页分裂,其实要从多方面去考路。比如,往期的文章中提到的:

对线面试官-CHAR 和 VARCHAR 了解嘛,区别是什么

以及:

被追着问 UUID 和自增 ID 做主键哪个好,为什么?

在前面的讨论中,我们已经了解到,使用 VARCHARUUID 作为主键可能会导致页分裂的问题。至于页分裂的影响可参考文章:

MySQL 数据库碎片化:隐患与解决策略

因此,为了尽量避免页分裂,建议选择使用自增的字段作为索引,特别是作为主键索引。这种做法可以显著减少页分裂的频率。

另外,如果需要插入大量数据,推荐使用批量插入的方式,而不是逐条插入。这样可以减少页分裂的次数,因为批量插入可以减少索引结构频繁调整的可能性。

此外,频繁的删除操作可能会导致页面过于稀疏,从而触发页合并。因此,一般建议使用逻辑删除而不是物理删除。逻辑删除是通过标记记录的状态来表示删除,而不是直接从数据库中移除记录。这种做法有助于减少页合并的发生,同时可以保持数据页的紧凑性,提高数据库的性能和空间利用率。

逻辑删除指的是在记录中添加一个标记(例如一个 deleted字段),用来表示记录是否被删除。通常情况下,当 deleted 字段的值为 1 时表示记录已被标记为删除状态,而值为 0 则表示记录是有效的。

相比之下,物理删除是指直接从数据库中删除记录,将其从表中移除。

使用逻辑删除的好处在于,被标记为删除的记录仍然保留在数据库中,这样可以保持数据的完整性和历史记录。同时,逻辑删除可以避免频繁的页合并操作,因为被标记为删除的记录仍然占据着原来的位置,不会造成数据页过于稀疏。

总之,逻辑删除是一种常见的数据库管理技术,适用于需要保留数据完整性、历史追踪或者避免频繁物理删除导致的数据库调整操作的场景。

当然,除了选择合适的数据类型和采取逻辑删除的策略外,调整 InnoDB 的配置参数也是优化数据库性能的重要手段之一。以下是一些可以调整的参数:

  1. 页大小(Page Size): InnoDB 的默认页大小是 16KB,但可以通过配置参数进行调整。较大的页大小可以减少页分裂的频率,特别是对于存储大量数据的表格。
  2. 填充因子(Fill Factor): 填充因子指定了数据页的空间利用率,即数据页中用于存储数据的比例。适当设置填充因子可以减少页分裂和碎片化,提高存储效率。
  3. 叶子页合并的阈值(Threshold for Leaf Page Merge): 叶子页合并是 InnoDB 在删除记录后可能触发的操作,通过调整阈值可以控制何时进行叶子页的合并,以维持数据页的紧凑性。
  4. 缓冲池大小(Buffer Pool Size): 缓冲池是 InnoDB 用来缓存数据和索引的内存区域。适当增加缓冲池大小可以减少磁盘 I/O 操作,提高查询性能。
  5. 日志文件大小和数量(Log File Size and Count): 日志文件用于记录事务操作,合理配置日志文件的大小和数量可以平衡数据恢复速度和写入性能。
  6. 并发控制参数(Concurrency Control Parameters): 如并发线程数、锁等待超时时间等参数的调整,可以优化并发操作的效率。

调整这些参数需要根据具体的数据库工作负载和硬件环境进行评估和实验,以达到最佳的性能和稳定性。通常建议在进行参数调整前,先备份数据库,并在生产环境中谨慎测试和验证配置的效果。

如有问题,欢迎微信搜索【码上遇见你】。

免费的Chat GPT可微信搜索【AI贝塔】进行体验,无限使用。

好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。

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

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

相关文章

map和set的原理、优劣势、应用场景和示例代码,统统告诉你。

map和set的原理都是基于哈希表实现的,通过哈希值来快速查找和插入元素,从而实现高效的数据存储和管理,那么他们之间有什么不同呢,该如何选择,本文带你了解。 一、map和set的原理 map和set都是数据结构,用…

新浪API系列:微博API探索社交数据价值(1)

微博API为创作者和开发者提供了一个探索社交数据价值的宝贵机会,助力他们在创新发展中取得成功。通过微博API,用户可以轻松访问和获取微博平台上丰富的社交数据。这些数据包括用户信息、关注列表、粉丝互动等,为创作者和开发者提供了深入了解…

基于CesiumJs的可视化大屏,效果不是一般的震撼。

CesiumJS是一个用于创建三维地理信息系统(GIS)应用程序的开源JavaScript库。它提供了强大的地理空间数据可视化和交互功能,可以用于构建虚拟地球、地图、飞行模拟等应用。 1. 三维地理空间可视化: CesiumJS支持将地理空间数据以三…

【紫外线发光器件小结】 UV-B LED 308nm

之前有介绍光的波长和频率计算。 波长小于390nm,频率高于770太赫兹的电磁波忙,或者光。基本有一段就叫做紫外线。 紫外线有分为UV-A/B/C;三小段; 如下图: 高压汞灯与UV LED的光谱;黑色线汞灯,蓝色LED

CentOS 安装 annie/lux,以及 annie/lux 的使用

annie 介绍 如果第一次听到 annie 想必都会觉得陌生,annie 被大家称为视频下载神器,annie 作者介绍说可以下载抖音、哔哩哔哩、优酷、爱奇艺、芒果TV、YouTube、Tumblr、Vimeo 等平台的视频。 githup:https://github.com/pingf/annie 支持…

HTML5实现我的音乐网站源码

文章目录 作者:[xcLeigh](https://blog.csdn.net/weixin_43151418) 1.设计来源1.1 界面效果1.2 轮播图界面1.3 音乐播放界面1.4 视频播放界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作…

Spark 分布式弹性计算集(RDD)相关概念介绍

目录 一、概述 二、RDD的核心概念 2.1 Partition 2.2 Partitioner 2.3 RDD的依赖关系 2.4 Stage 2.5 PreferredLocation 2.6 CheckPoint 三、RDD的持久化 3.1 概述 3.2 概念 3.3 RDD持久化级别 3.3.1 MEMORY_ONLY 3.3.2 MEMORY_AND_DISK 3.3.3 MEMORY_ONLY_SER …

份及恢复Sonarqube服务数据

基础数据: 源数据机ip:192.*.53 测试机ip:192.*.65 Sonarqube访问地址:http://192.*.65:9000/ 账户名:admin 密码:123456 数据库postgres: 版本:PostgreSQL 15.3 一、数据备份…

不同层数PCB如何选择合适板厚?

在回答这个问题前,我们首先需要了解什么是PCB厚度。 PCB厚度是指电路板完成后的厚度。 覆铜板的厚度:0.5、0.7、0.8、1.0、1.2、1.5、1.6、2.0、2.4、3.2和6.4毫米。 纸基覆铜板的标称厚度为 0.7 至 1.5 毫米。让我们开始了解更多细节。 标准 PCB 铜厚度…

2014-2022年审计师能力与专长

审计师在确保企业财务透明度和增强市场信心方面扮演着关键角色。以下是对审计师能力与专长数据的介绍: 数据简介 定义:审计师是独立、客观、合法地对组织进行财务状况、经营绩效和风险水平评估的专业人员。目的:通过收集和评估证据&#xf…

数据库开发:mysql基础一

文章目录 数据库开发Day15:MySQL基础(一)一、MySQL介绍与安装【1】MySQL介绍(5)启动MySQL服务(6)修改root登陆密码 二、SQL简介三、数据库操作四、数据表操作4.1、数据库数据类型4.2、创建数据表…

pnpm介绍

PNPM 是一个 JavaScript 包管理器,类似于 npm 和 Yarn。它的全称是 "Performant npm",主要设计目标是优化包的安装和管理过程,以提升速度和效率。PNPM 的主要特点包括: 符号链接(Symlink)&#x…

【SOLID原则前端中的应用】接口隔离原则(Interface Segregation Principle,ISP)- vue3示例

接口隔离原则(Interface Segregation Principle,ISP)在Vue 3中的应用 接口隔离原则(Interface Segregation Principle,ISP)规定,客户端不应该被迫依赖于它不使用的方法。 换句话说,…

【Python】已解决:SyntaxError: positional argument follows keyword argument

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:SyntaxError: positional argument follows keyword argument 一、分析问题背景 在Python编程中,当我们在调用函数时混合使用位置参数(p…

运维必会 掌握 Vim:从入门到精通

前言 Vim 是一个强大的文本编辑器,以其高效的编辑操作和强大的可定制性著称。无论你是编程新手还是经验丰富的开发者,Vim 都能帮助你提高工作效率。本文将带你深入了解 Vim,从基本操作到高级配置,逐步掌握。 一、基本操作 1. 模…

电力设备巡检管理系统

电力设备巡检管理系统是一种基于计算机技术和网络通信技术的智能化管理系统,旨在提高电力设备巡检的效率、准确性和安全性。以下是对该系统的详细介绍: 一、系统概述 电力设备巡检管理系统通过实时采集、传输和分析电力设备的数据,帮助电力企…

项目方案:社会视频资源整合接入汇聚系统解决方案(九)-视频监控汇聚应用案例

目录 一、概述 1.1 应用背景 1.2 总体目标 1.3 设计原则 1.4 设计依据 1.5 术语解释 二、需求分析 2.1 政策分析 2.2 业务分析 2.3 系统需求 三、系统总体设计 3.1设计思路 3.2总体架构 3.3联网技术要求 四、视频整合及汇聚接入 4.1设计概述 4.2社会视频资源分…

Docassemble interview 未授权任意文件读取漏洞复现(CVE-2024-27292)

0x01 产品简介 Docassemble是一款强大的开源工具,主要用于自动化生成和定制复杂文档,特别是在法律文档处理领域表现出色。由Jonathan Pyle个人开发者开发,是一个免费的开源专家系统,用于指导访谈和文档组装。Docassemble基于Python编写,充分利用了Python的灵活性和广泛的…

【无标题】地平线2西之绝境/Horizon Forbidden West™ Complete Edition(更新:V1.3.57)

游戏介绍 与埃洛伊同行,在危险壮美的边疆之地揭开种种未知的神秘威胁。此完整版可完整享受广受好评的《地平线 西之绝境™》内容和额外内容,包括在主线游戏后展开的后续故事“炙炎海岸”。 重返《地平线》中遥远未来的后末日世界,探索远方的土…

解密智慧校园基础数据的学年管理功能

在智慧校园平台中,学年管理模块构成了教育活动有序运行的基石,它精心设计来适应多样化的学术日程,确保学校的各项事务都能在清晰规划的学年框架内顺利推进。这一核心功能不仅关乎时间的界定,更深层次地融入了教育管理的每一个细微…