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

InnoDB

InnoDB 是 MySQL 默认的存储引擎,它提供了事务支持、行级锁定和外键约束等高级功能。下面详细解析 InnoDB 的一些底层原理和关键特性。

1. 数据存储结构

表空间(Tablespace)

InnoDB 使用表空间来管理数据存储,表空间可以是共享的(系统表空间)或独立的(每个表一个表空间)。在 MySQL 5.6 及以后的版本中,默认情况下,每个 InnoDB 表会有自己独立的表空间。

页(Page)

InnoDB 将数据存储在称为页(Page)的物理结构中,默认页大小为 16KB。页是最小的磁盘管理单位。

段和区(Extent)

页进一步被组织成段(Segment)和区(Extent)。一个区包含 64 个连续的页(1MB),多个区组成一个段。段用于管理特定类型的数据,如数据页、索引页、Undo 页等。

2. 索引结构

InnoDB 使用 B+ 树作为其主要的索引数据结构:

聚簇索引(Clustered Index)

每个 InnoDB 表都有一个聚簇索引,这个索引按主键顺序存储表中的行数据。如果没有定义主键,InnoDB 会选择一个唯一的非空索引代替;如果没有这样的索引,InnoDB 会生成一个隐式的主键作为聚簇索引。

二级索引(Secondary Index)

二级索引是非聚簇索引,它们存储索引列的值和相应的主键值。查找二级索引时,首先通过二级索引找到主键值,然后通过主键值在聚簇索引中找到实际的数据行。

3. 事务支持

InnoDB 是支持 ACID 特性的事务型存储引擎:

原子性(Atomicity)

InnoDB 使用重做日志(Redo Log)和回滚日志(Undo Log)来确保事务的原子性。重做日志用于恢复提交的事务,回滚日志用于回滚未提交的事务。

一致性(Consistency)

InnoDB 使用外键约束和事务来确保数据的一致性。

隔离性(Isolation)

InnoDB 支持多种隔离级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和可串行化(Serializable)。默认的隔离级别是可重复读。

持久性(Durability)

InnoDB 通过将事务日志写入磁盘来确保持久性。事务日志被保存在重做日志文件中,系统崩溃后可以通过重做日志恢复数据。

4. 并发控制

锁机制

InnoDB 支持行级锁定,包括共享锁(S Lock)和排他锁(X Lock)。这允许多个事务并发访问数据,但保证数据一致性。

多版本并发控制(MVCC)

InnoDB 使用 MVCC 来提高并发性能和隔离性。MVCC 通过保存数据行的多个版本,并使用回滚日志来实现。这使得读操作不会阻塞写操作,写操作也不会阻塞读操作。

5. 崩溃恢复

InnoDB 使用重做日志和检查点机制来实现崩溃恢复。当数据库崩溃时,InnoDB 可以通过重做日志将数据恢复到一致状态。

重做日志(Redo Log)

重做日志记录事务的修改操作,用于在崩溃后重做这些操作以恢复数据。重做日志写入是顺序的,因此性能较好。

回滚日志(Undo Log)

回滚日志记录事务的旧版本数据,用于实现回滚和 MVCC。回滚日志会在事务提交后被清理。

6. 自动检查点(Checkpoint)

InnoDB 会定期执行检查点,将内存中的数据刷新到磁盘,并更新重做日志的写入位置。检查点有助于减少恢复时间和提高性能。

总结

InnoDB 作为 MySQL 的默认存储引擎,提供了强大的事务支持、行级锁定、多版本并发控制和崩溃恢复机制。它的底层实现涉及复杂的数据结构和算法,保证了高性能和高可靠性。通过理解这些底层原理,可以更好地优化和管理 MySQL 数据库。

http://www.lryc.cn/news/400109.html

相关文章:

  • spark运行报错:Container killed by YARN for exceeding memory limits
  • (三)大模型/人工智能/机器学习/深度学习/NLP
  • 数学基础 -- 三角学
  • 基于BitMap的工作日间隔计算
  • sqlite3 — DB-API 2.0 interface for SQLite databases
  • Spring Boot中的安全配置与实现
  • DepthAnything(2): 基于ONNXRuntime在ARM(aarch64)平台部署DepthAnything
  • JAVA简单封装UserUtil
  • 【TOOLS】Chrome扩展开发
  • 分享WPF的UI开源库
  • [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)
  • JVM:类加载器
  • 支持向量机 (support vector machine,SVM)
  • 宝塔面板以www用户运行composer
  • 昇思25天打卡营-mindspore-ML- Day24-基于 MindSpore 实现 BERT 对话情绪识别
  • 【精品资料】模块化数据中心解决方案(33页PPT)
  • N6 word2vec文本分类
  • excel、word、ppt 下载安装步骤整理
  • 【python学习】标准库之日期和时间库定义、功能、使用场景和示例
  • Android --- Kotlin学习之路:基础语法学习笔记
  • 嵌入式智能手表项目实现分享
  • `nmap`模块是一个用于与Nmap安全扫描器交互的库
  • JVM系列 | 对象的创建与存储
  • 【JavaScript 算法】快速排序:高效的排序算法
  • Excel如何才能忽略隐藏行进行复制粘贴?
  • 行人越界检测 越线 越界区域 多边形IOU越界判断
  • 「UCD」浅谈蓝湖Figma交互设计对齐
  • VUE3 播放RTSP实时、回放(NVR录像机)视频流(使用WebRTC)
  • [PaddlePaddle飞桨] PaddleOCR-光学字符识别-小模型部署
  • Python应用开发——30天学习Streamlit Python包进行APP的构建(15):优化性能并为应用程序添加状态