InnoDB架构,一幅图秒懂!

1,975 阅读4分钟

网上写 MySQL 架构的文章比较多,写 InnoDB 架构的文章比较少,今天简单说说 InnoDB 架构。

_画外音:_一分钟,一幅图,秒懂。

MySQL 简要架构是怎么样的?

MySQL 整体分为三层:

(1)客户端,是各种编程语言的 connector;

(2)MySQL 服务,内部包含各种组件,实现各种功能;

(3)文件系统,数据存储与日志;

其中,MySQL 服务内,可以以插件的形式,实现各种存储引擎。

在 InnoDB,MyISAM,Memory… 等各种存储引擎中,InnoDB 是使用范围最广的

_画外音:_事务,行锁,聚集索引,MVCC… 众多特性让 InnoDB 备受青睐。

InnoDB 简要架构是怎么样的?

InnoDB 整体也分为三层:

(1)内存结构 (In-Memory Structure),这一层在 MySQL 服务进程内;

(2)OS Cache,这一层属于内核态内存;

(3)磁盘结构 (On-Disk Structure),这一层在文件系统上;

这三层的交互有两类:

(1)通过 OS Cache 落地数据(上图中,两个短箭头);

(2)直接 O_Direct 落地数据(长途中,长箭头);

_画外音:_这是一个性能与一致性折衷的设计。

InnoDB 内存结构包含哪些核心组件?

InnoDB 内存结构包含四大核心组件,分别是:

(1)缓冲池 (Buffer Pool);

(2)写缓冲 (Change Buffer);

(3)自适应哈希索引 (Adaptive Hash Index);

(4)日志缓冲 (Log Buffer);

恰好,这四大核心组件,今年都详细的写过。

缓冲池 (Buffer Pool)

目的是提升 InnoDB 性能,加速读请求,避免每次数据访问都进行磁盘 IO。

_画外音:_和系统架构设计中缓存的功能有点像,避免每次访问数据库。

这里面涉及的技术点包括:预读,局部性原理,LRU,预读失败 + 缓冲池污染,新生代老生代双链 LRU… 细节参见《缓冲池 (buffer pool),彻底懂了!》。

写缓冲 (Change Buffer)

目的是提升 InnoDB 性能,加速写请求,避免每次写入都进行磁盘 IO。

_画外音:_我 C,这个牛逼,写入居然都可以不进行磁盘 IO?

细节参见《写缓冲 (change buffer),彻底懂了!》,这篇文章的细节原理,特别有意思。

自适应哈希索引 (Adaptive Hash Index)

目的是提升 InnoDB 性能,加速读请求,减少索引查询的寻路路径。

这里面涉及的技术点包括:聚集索引,普通索引,哈希索引… 细节参见《InnoDB 到底支不支持哈希索引》。

日志缓冲 (Log Buffer)

目的是提升 InnoDB 性能,极大优化 redo 日志性能,并提供了高并发与强一致性的折衷方案。

这里面涉及的技术点包括:redo log 作用,流程,三层架构,随机写优化为顺序写,次次写优化为批量写… 细节参见《事务已提交,数据却丢了,赶紧检查下 LogBuffer》。

InnoDB 磁盘结构包含哪些核心组件?

主要包括日志与表空间,其结构与原理比 InnoDB 内存结构更加复杂,如果大家感兴趣,未来再撰文详述。

一分钟系列,希望大家对 InnoDB 架构,以及 InnoDB 内存结构的四大组件有了更系统性的了解。

知其然,知其所以然,希望大家有收获。

相关文章

缓冲池 (buffer pool),彻底懂了!
写缓冲 (change buffer),彻底懂了!
InnoDB 到底支不支持哈希索引?
事务已提交,数据却丢了,赶紧检查下 LogBuffer

末了,昨天有个朋友留言 “谢谢”,说面试过程中,用从“架构师之路” 里学到的知识,完美回答了面试官提出的一个 MySQL 底层细节问题,顺利拿到 offer,涨薪 20%。后来他和面试官一对,原来面试官也是看了架构师之路才学会的这个 MySQL 知识点,才问了相关的问题。

为啥说这个事?

我希望大家从 “架构师之路” 学到东西,职业生涯往上走,这是我的初衷。如果大家把学到的新知识,拿来出题为难面试者,这不是我想看到的,这样对没有订阅 “架构师之路” 的朋友不公平。
我承诺,不把从架构师之路中学到的新知识,作为面试候选人的面试题!

谢谢大家的支持!