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

相关推荐
离开地球表面_9925 分钟前
金三银四程序员跳槽指南:从简历到面试再到 Offer 的全流程准备
前端·后端·面试
UrbanJazzerati25 分钟前
Scrapling入门指南:零基础也能学会的网页抓取神器
后端·面试
随逸17726 分钟前
《Milvus向量数据库从入门到实战,手把手搭建语义检索系统》
数据库
比尔盖茨的大脑27 分钟前
事件循环底层原理:从 V8 引擎到浏览器实现
前端·javascript·面试
beata29 分钟前
Java基础-18:Java开发中的常用设计模式:深入解析与实战应用
java·后端
Qinana1 小时前
从 URL 输入到页面展示:一场跨越进程与协议的“装修”大戏
前端·面试·程序员
Seven971 小时前
剑指offer-81、⼆叉搜索树的最近公共祖先
java
我叫黑大帅1 小时前
Go中的interface的两大用法
后端·面试·go
龙猫不热1 小时前
从 0 手写 Promise:拆解 Promise 链式调用的实现原理
前端·javascript·面试
神秘的猪头1 小时前
🚀 React 开发者进阶:RAG 核心——手把手带你玩转 Milvus 向量数据库
数据库·后端·llm