• 周五. 10 月 11th, 2024

    架构师之路(五)之InnoDB架构

    root

    2 月 21, 2021 #架构师之路

    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内存结构的四大组件有了更系统性的了解。

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

    本文转自:https://mp.weixin.qq.com/s/zKHNaWY5AS0OMmag1mQTKQ

    root