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

相关推荐
摘星编程5 分钟前
并发设计模式实战系列(6):读写锁
java·设计模式·并发编程
松树戈10 分钟前
PostgreSQL 分区表——范围分区SQL实践
数据库·sql·postgresql
bing_15820 分钟前
Redis 的单线程模型对微服务意味着什么?需要注意哪些潜在瓶颈?
数据库·redis·微服务
wangzhongyudie23 分钟前
SQL实战:01之行转列实现
数据库·sql
斗鹰一余洛晟24 分钟前
工作中sql总结
数据库·sql
Java中文社群26 分钟前
最火向量数据库Milvus安装使用一条龙!
java·人工智能·后端
阿七想学习27 分钟前
MySQL《事务》
数据库·mysql
Yang_yangyang32 分钟前
mysql定时备份、打包、传输
数据库·mysql·自动化
Apache Flink38 分钟前
京东物流基于Flink & StarRocks的湖仓建设实践
java·大数据·flink
JAVA百练成神43 分钟前
深度理解spring——BeanFactory的实现
java·后端·spring