MySQL|Mysql面试之体系结构简介

一图降十会,先上结构图瞅瞅
MySQL|Mysql面试之体系结构简介
文章图片


下面从上到下依次介绍:
自顶向下一共有四层,分别是网络连接层,服务层(核心层),存储引擎层,系统文件层。
1、网络连接层:
主要负责连接管理、授权认证、安全等等。每个客户端连接都对应着服务器上的一个线程。服务器上维护了一个线程池,避免为每个连接都对线程进行创建和销毁。当客户端连接到 MySQL 服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过 SSL 证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。这一层并不是 MySQL 特有的技术。

2、 服务层
MySQL 的核心服务层都在这一层,查询解析,SQL 执行计划分析,SQL 执行计划优化,查询缓存。以及跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。通过下图来观察服务层的内部结构:
MySQL|Mysql面试之体系结构简介
文章图片

SQL语句在服务层中具体的流程:
查询缓存
在解析查询之前,服务器会检查查询缓存,如果能找到对应的查询,服务器不必进行查询解析、优化和执行的过程,直接返回缓存中的结果集。
解析器与预处理器
MySQL 会解析查询,并创建了一个内部数据结构(解析树)。这个过程解析器主要通过语法规则来验证和解析。比如 SQL 中是否使用了错误的关键字或者关键字的顺序是否正确等等。预处理会根据 MySQL 的规则进一步检查解析树是否合法。比如要查询的数据表和数据列是否存在等。
查询优化器
优化器将其转化成查询计划。多数情况下,一条查询可以有很多种执行方式,最后都返回相应的结果。优化器的作用就是找到这其中最好的执行计划。优化器并不关心使用的什么存储引擎,但是存储引擎对优化查询是有影响的。优化器要求存储引擎提供容量或某个具体操作的开销信息来评估执行时间。
查询引擎
在完成解析和优化阶段以后,MySQL 会生成对应的执行计划,查询执行引擎根据执行计划给出的指令调用存储引擎的接口得出结果。

3、存储引擎层
负责 MySQL 中数据的存储与提取。服务器中的查询执行引擎通过 API 与存储引擎进行通信,通过接口屏蔽了不同存储引擎之间的差异。MySQL 采用插件式的存储引擎。MySQL 提供了许多存储引擎,每种存储引擎有不同的特点。可以根据不同的业务特点,选择最适合的存储引擎。如果对于存储引擎的性能不满意,可以通过修改源码来得到自己想要达到的性能。
特点:存储引擎是针对于表的而不是针对库的(一个库中不同表可以使用不同的存储引擎),服务器通过 API 与存储引擎进行通信,用来屏蔽不同存储引擎之间的差异。

4、系统文件层
主要将数据库的数据存储在文件系统上,并完成与存储引擎的交互。
MySQL 数据库中 InnoDB 存储引擎的数据表在文件上的体现:
.frm 文件:与表相关的元数据信息都存放在frm文件,包括表结构的定义信息等。
.ibd 文件:存放 InnoDB 表的数据文件。
.ibdata 文件:存放 InnoDB 表的数据文件。
ps:.ibd 文件与 .ibdata 文件的区别?
都是存放 InnoDB 数据的文件,之所以用两种文件来存放 InnoDB 的数据,是因为 InnoDB 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是用独享表空间存放存储数据。独享表空间存储方式使用 .ibd 文件,并且每个表对应一个 ibd 文件。共享表空间存储方式采用 .ibdata 文件,所有的表共同使用一个 ibdata 文件,即所有的数据文件都存在一个文件中。决定使用哪种表的存储方式可以通过 MySQL 的配置文件中 innodb_file_per_table 选项来指定。InnoDB 默认使用的是独享表的存储方式,该方式的好处是当数据库产生大量文件碎片的时,整理磁盘碎片对线上运行环境的影响较小。
【MySQL|Mysql面试之体系结构简介】





MySQL|Mysql面试之体系结构简介
文章图片

    推荐阅读