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 分钟前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
Nturmoils13 分钟前
SQL 编辑器不只是写查询:我用 KStudio 排查一次订单异常
数据库
SL_staff22 分钟前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
IvorySQL32 分钟前
PostgreSQL 日报|逻辑解码 DDL 子事务缺陷修复(10 月 12 日)
数据库·postgresql
Shaoshing34 分钟前
前缀和与差分
java·数据结构·算法·前缀和·差分
这个DBA有点耶41 分钟前
研发规模/投入最大的国产数据库厂商是谁?拆解五个衡量维度
数据库·程序员·产品
dd聊技术1 小时前
Prompt 从代码常量搬进数据库:改一句话,不用再发一次版
java·后端
ly76891 小时前
Spring Data MongoDB 批量写入实践:BulkOperations 批大小与写关注权衡
java·mongodb·spring·批量写入·bulkoperations·写关注·mongotemplate
TAKETODAY1 小时前
Netty 是怎么把 HTTP 请求交给 MVC 的?一个请求的完整链路
java·netty
蚰蜒螟1 小时前
从内核启动到 Java NIO:一次 socket accept 的源码串联之旅
java·python·nio