InnoDB架构

https://mp.weixin.qq.com/s/zKHNaWY5AS0OMmag1mQTKQ

mysql架构图

mysql 分为三层:

1.客户端:各种编程语言的connector.

2.mysql服务:内部包含各种组件,实现各种功能。

3.文件系统:数据存储与日志。

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

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

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

InnoDB简要架构

InnoDB 分为三层:

1.内存结构:(In-memory structrue ),这一层在mysql服务进程内。

2.OS Cache 这一层属于内核态内存。

3.磁盘结构:(On-Disk structrue)这一层在文件系统上

这三层的交互关系:

1.通过Os cache 落地数据。

2.直接On-Direct落地数据。

画外音:这是一个性能与一致性问题。

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

1. 缓存池(Buffer Pool)
2. 写缓存(Change Buffer)
3. 自适应Hase索引(Adaptive Hash Index)
4. 日志缓存(Log Buffer)

缓冲池(Buffer Pool)

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

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

这里面涉及的技术点包括:预读,局部性原理,LRU,预读失败+缓冲池污染,新生代老生代双链LRU。

细节参见:http://1t.click/aMY8

写缓冲(Change Buffer)

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

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

细节参见:http://1t.click/aMY6

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

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

这里面涉及的技术点包括:聚集索引,普通索引,哈希索引…

细节参见:http://1t.click/aMY3

日志缓冲(Log Buffer)

目的是提升InnoDB性能,极大优化redo日志性能,并提供了高并发与强一致性的折衷方案。
这里面涉及的技术点包括:redo log作用,流程,三层架构,随机写优化为顺序写,次次写优化为批量写…

细节参见:http://1t.click/aMY2