InnoDB圣经: 硬核解读 InnoDB 内存架构 和 磁盘架构 (图解+秒懂+史上最全 )

本文 的 原文 地址

原始的内容,请参考 本文 的 原文 地址

本文 的 原文 地址

尼恩说在前面

在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团、蚂蚁、得物的面试资格,遇到很多很重要的相关面试题:

InnoDB 内存结构 和 磁盘 结构, 你理解吗?

什么是 Doublewrite Buffer ?InnoDB是如何实现 Doublewrite Buffer 的?

比较undo log、redo log和bin log的作用和区别?

最近有小伙伴在面 腾讯,问到了mysql InnoDB 存储引擎 相关的面试题。 小伙伴 没有系统的去梳理和总结,所以支支吾吾的说了几句,面试官不满意,面试挂了。

所以,尼恩给大家做一下系统化、体系化的梳理,使得大家内力猛增,可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提”。

当然,这道面试题,以及参考答案,也会收入咱们的 《尼恩Java面试宝典PDF》V175版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请到文末公号【技术自由圈】获取

本文作者:

  • 第一作者 老架构师 肖恩(肖恩 是尼恩团队 高级架构师,负责写此文的第一稿,初稿 )
  • 第二作者 老架构师 尼恩 (45岁老架构师, 负责 提升此文的 技术高度,让大家有一种 俯视 技术、俯瞰技术、 技术自由 的感觉

一、InnoDB 存储引擎

1、MySQL体系和InnoDB存储引擎

MySQL的体系结构是分层设计的,包括Server层和 Engin层。

1. 服务层(Server层):处理连接、查询解析、优化、内置函数

2. 存储引擎层(Engin层):负责数据存储/检索(可插拔)

Engin层 是可以拔插设计, 可以 选择不同的 存储引擎。

InnoDB 属于 Engin层 ,是默认的 存储引擎, 负责 "最终数据存储与管理"的核心组件。

MySQL整体架构:

image-20250818195056851

各层作用

  • 连接层:处理客户端接入(如TCP连接),验证密码,管理连接池。
  • 服务层:负责SQL的解析、优化(比如选最优索引)、缓存,以及执行存储过程等。
  • 存储引擎层:这是MySQL的"数据管家",通过统一接口与服务层交互。InnoDB是其中功能最完善的(支持事务、行锁等),直接对接磁盘文件。
  • 文件系统层:最终存储数据的物理文件(如.ibd数据文件、日志文件等)。

关键点:可拔插架构中,有一套规范的I/O操作接口,InnoDB通过标准接口嵌入MySQL,处理所有数据I/O操作

2、Inno DB总体架构

InnoDB 存储引擎目前也是应用最广泛的存储引擎。 从 MySQL 5.5 版本开始作为表的默认存储引擎。

InnoDB 存储引擎 最早由 Innobase Oy 公司开发(属第三方存储引擎)。

InnoDB 存储引擎 是第一个完整支持 ACID 事务的 MySQL 存储引擎,特点是行锁设计、支持 MVCC、支持外键、提供一致性非锁定读,非常适合 OLTP 场景的应用使用。

InnoDB 存储引擎架构包含内存结构和磁盘结构两大部分

MySQL 8.0 版本,总体架构图如下:

img

MySQL 5.5 版本,总体架构图如下:

img

3、Inno DB数据读写流程

Mermaid

关键步骤:

1)读路径:优先检查缓冲池,未命中时从.ibd(也就是各种表空间)加载

2)写路径

  • 先写redo log(顺序I/O)
  • 异步写入数据文件(随机I/O)

SHOW ENGINE INNODB STATUS\G -- 查看刷脏进度

3)崩溃恢复:通过redo log重做未落盘操作

二、InnoDB内存架构

InnoDB的内存就像"高速缓存区",减少磁盘IO,提升速度。

主要组件如下:

Mermaid

核心组件

(1) Buffer Pool 数据热区枢纽

预分配连续内存缓存数据页,通过LRU算法管理热数据,将随机I/O转为内存操作。

(2) Log Buffer 写操作高速通道

暂存事务中的redo日志,innodb_flush_log_at_trx_commit控制刷盘策略,平衡性能与安全。

(3) Change Buffer 非聚簇索引加速器

缓存非唯一索引的DML操作(INSERT/UPDATE/DELETE),后台异步合并到磁盘索引结构。

(4) 自适应哈希索引 智能路径优化器

自动检测高频等值查询路径,在内存中构建哈希索引,突破B+树检索深度限制。

(5) undo 日志缓冲:

InnoDB 内存中临时存放 undo 日志的区域,用于事务回滚和多版本控制,最终会刷新到磁盘的 Undo 表空间。

2.1、Buffer Pool

2.1.1 什么是 Buffer Pool?

简单说,Buffer Pool 是 InnoDB 存储引擎里一块内存区域,专门用来缓存表数据和索引数据。

就像我们平时把常用的文件放在桌面方便拿取,MySQL 也会把频繁访问的数据存到 Buffer Pool 里,避免每次都去读写磁盘(磁盘速度比内存慢太多),以此提高查询效率。

它是 InnoDB 性能的“核心加速器”,大部分时候,我们查数据、改数据,都是和 Buffer Pool 打交道,而不是直接操作磁盘。

Buffer Pool缓存磁盘数据页(16KB/页)。

通过减少磁盘 I/O 提升性能,使用 LRU 算法 + 冷热分离管理数据页。

2.1.2 数据读取流程


SELECT * FROM table WHERE id=1; -- 直接返回内存数据

Mermaid

关键步骤说明:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值