小言_互联网的博客

InnoDB架构,一幅图秒懂!

371人阅读  评论(0)

网上写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 …细节参见《
 
写缓冲 (Change Buffer)
目的是提升InnoDB性能, 加速写请求 ,避免每次写入都进行磁盘IO。
画外音:我C,这个牛逼,写入居然都可以不进行磁盘IO?
细节参见《
 
自适应哈希索引 (Adaptive Hash Index)
目的是提升InnoDB性能, 加速读请求 ,减少索引查询的寻路路径。
这里面涉及的技术点包括: 聚集索引,普通索引,哈希索引 …细节参见《
 
日志缓冲 (Log Buffer)
目的是提升InnoDB性能, 极大优化redo日志性能 ,并提供了高并发与强一致性的折衷方案。
这里面涉及的技术点包括: redo log作用,流程,三层架构,随机写优化为顺序写,次次写优化为批量写 …细节参见《
 
InnoDB磁盘结构包含哪些核心组件?
主要包括 日志 表空间 ,其结构与原理比InnoDB内存结构更加复杂,如果大家感兴趣,未来再撰文详述。

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

架构师之路-分享技术思路

相关文章





 
末了,昨天有个朋友留言“谢谢”,说面试过程中,用从“架构师之路”里学到的知识,完美回答了面试官提出的一个MySQL底层细节问题,顺利拿到offer,涨薪20%。后来他和面试官一对,原来 面试官也是看了架构师之路才学会的这个MySQL知识点,才问了相关的问题
 
为啥说这个事?
我希望大家 从“架构师之路”学到东西,职业生涯往上走,这是我的初衷 。如果大家把学到的新知识,拿来出题为难面试者,这不是我想看到的,这样对没有订阅“架构师之路”的朋友不公平。

我承诺,不把从架构师之路中学到的新知识,作为面试候选人的面试题!
 
谢谢大家的支持!

转载:https://blog.csdn.net/shenjian58/article/details/102577671
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场