# 基础架构

MySQL 的基本架构示意图( 🎏 网络图片,学习使用,侵权删除) MySQL-Infrastructure.png

大体来说MySQL分为Server层和储存引擎层两部分。

  • Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
  • 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDBMyISAMMemory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了默认存储引擎。

# 连接器

连接器负责跟客户端建立连接、获取权限、维持和管理连接

# 查询缓存

MySQL拿到一个请求后,会先去查询缓存看看、之前是不是执行过这条语句。之前执行过的语句可能会以key-value对的形式被直接放在内存。如存在直接返回结果,不存在则查询,并将结果记入缓存。 对于更新压力大的数据库来说,查询缓存的命中率会非常低。

需要注意的是,MySQL 8.0版本直接将查询缓存的整块功能删掉了,也就是说8.0已经没有缓存了。

# 分析器

SQL语句做词法分析、语法分析,如果你的SQL语句不对,就会收到You have an error in your SQL syntax的错误提醒。

# 优化器

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

# 执行器

根据表的引擎定义,去使用这个引擎提供的接口。

# InnoDB存储引擎架构图

innodb-architecture

从这张图可以看到,InnoDB存储结构主要包括两部分:逻辑存储结构物理存储结构

逻辑上是由表空间tablespace —> 段segment或者inode —> 区Extent ——>数据页Page构成,Innodb逻辑管理单位是segment, 空间分配的最小单位是extent,每个segment都会从表空间FREE_PAGE中分配32page,当这32page不够用时,会按照以下原则进行扩展: 如果当前小于1extent,则扩展到1extent;当表空间小于32MB时,每次扩展一个extent;表空间大于32MB,每次扩展4extent

物理上主要由系统用户数据文件,日志文件组成,数据文件主要存储MySQL字典数据和用户数据,日志文件记录的是data page的变更记录,用于MySQL Crash时的恢复。

Last Updated: 3 years ago