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存储引擎的内存结构和磁盘结构,帮助理解各个组件之间的关系和数据流转过程。

相关推荐
ACGkaka_5 分钟前
MySQL 学习(十)执行一条查询语句的内部执行过程、MySQL分层
学习·mysql·adb
呆呆洁ᵔ·͈༝·͈ᵔ27 分钟前
配置集群-日志聚集操作
java·ide·eclipse
lyrhhhhhhhh36 分钟前
Spring 模拟转账开发实战
java·后端·spring
banzhenfei39 分钟前
xp_cmdshell bcp 导出文件
java·数据库·sql
带刺的坐椅42 分钟前
SpringBoot3 使用 SolonMCP 开发 MCP
java·ai·springboot·solon·mcp
CodeJourney.42 分钟前
ChemBlender:科研绘图创新解决方案
数据库·人工智能·信息可视化·excel
胡斌附体1 小时前
微服务调试问题总结
java·微服务·架构·调试·本地·夸微服务联调
bing_1581 小时前
Spring MVC HttpMessageConverter 的作用是什么?
java·spring·mvc
笨蛋不要掉眼泪2 小时前
SpringAOP
java·数据库·spring·log4j
IvanCodes2 小时前
九、HQL DQL七大查询子句
大数据·数据库·hive