MySQL之企业面试题:InnoDB存储引擎组成部分、作用

InnoDB存储引擎主要由以下四个组成部分:

1. Buffer Pool(缓冲池)

原理

  • 缓冲池是InnoDB存储引擎的核心组件之一,用于缓存表的数据页和索引页,减少对磁盘I/O的访问次数。缓冲池中的数据页在事务提交时会根据需要刷新到磁盘。
  • 缓冲池以Page页为单位,底层采用链表数据结构管理Page。根据状态,将Page分为三种类型:
    • Free Page:空闲Page,未被使用。
    • Clean Page:被使用Page,数据没有被修改过。
    • Dirty Page:脏页,被使用Page,数据被修改过,数据与磁盘的数据产生了不一致。

功能

  • 缓冲池的主要功能是提高数据访问速度,减少磁盘I/O操作。当执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而加快处理速度。

2. Change Buffer(更改缓冲区)

原理

  • 对于非唯一二级索引的插入操作,如果所在的数据页尚未加载到缓冲池中,InnoDB会将这部分修改暂存在更改缓冲区中,待后续数据页加载到缓冲池时再合并写入。
  • Change Buffer的意义在于减少磁盘I/O操作,提高写入性能。

功能

  • Change Buffer的主要功能是优化对非唯一二级索引的写入操作。通过将修改暂存,避免了每次写入操作都直接访问磁盘,从而提高了写入性能。

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

原理

  • InnoDB会根据查询模式自动生成哈希索引,加快某些查询的性能。自适应哈希索引是基于缓冲池中的数据生成的,可以显著提高某些查询的效率。
  • 自适应哈希索引的生成是动态的,根据查询的热点数据自动创建和维护。

功能

  • 自适应哈希索引的主要功能是优化查询性能。通过生成哈希索引,可以快速定位到数据,减少B+树的遍历次数,从而提高查询速度。

4. Log Buffer(日志缓冲区)

原理

  • Log Buffer用于存储待写入重做日志文件(redo log)的事务日志记录。这些日志记录了对数据的更改操作,以支持事务的持久性和崩溃恢复能力。
  • 当事务提交时,Log Buffer中的日志会被刷新到重做日志文件中,确保事务的持久性。

功能

  • Log Buffer的主要功能是确保事务的持久性和崩溃恢复能力。通过记录事务日志,可以在数据库崩溃后,通过重做日志文件恢复未完成的事务,保证数据的一致性。

示意图

以下是InnoDB存储引擎的架构图,左侧为内存结构,右侧为磁盘结构:

plaintext 复制代码
+----------------+               +----------------+
|               |               |               |
|  Buffer Pool   |               |  Tablespaces   |
|  (数据页缓存)  |               |  (数据文件)    |
|               |               |               |
+---------------+               +---------------+
|               |               |               |
|  Change Buffer |               |  Redo Log     |
|  (更改缓冲区)  |               |  (重做日志)    |
|               |               |               |
+---------------+               +---------------+
|               |               |               |
|  Adaptive Hash |               |  Undo Logs     |
|  Index         |               |  (回滚日志)    |
|               |               |               |
+---------------+               +---------------+
|               |               |               |
|  Log Buffer    |               |  Doublewrite   |
|  (日志缓冲区)  |               |  Buffer        |
|               |               |  (双写缓冲区)  |
+---------------+               +---------------+

这个架构图展示了InnoDB存储引擎的内存结构和磁盘结构,帮助理解各个组件之间的关系和数据流转过程。

相关推荐
无巧不成书021810 小时前
30分钟入门Java:从历史到Hello World的小白指南
java·开发语言
成为大佬先秃头11 小时前
数据库连接池:Druid
数据库·mysql·druid
程序员飞哥11 小时前
90后大龄程序员失业4个月终于上岸了
后端·面试·程序员
zs宝来了11 小时前
Playwright 自动发布 CSDN 的完整实践
java
吴声子夜歌12 小时前
TypeScript——基础类型(三)
java·linux·typescript
庞轩px13 小时前
模拟面试回答第十三问:JVM内存模型
jvm·面试·职场和发展
晓华-warm13 小时前
Warm-Flow 1.8.5 正式发布:超时自动审批、暂存功能来了!
数据库
DynamicsAgg14 小时前
企业数字化底座-k8s企业实践系列第二篇pod创建调度
java·容器·kubernetes
人工智能AI技术14 小时前
计算机专业面试必看!90%学生都踩过的算法面雷区
人工智能·面试