MySQL系列:架构

1. MySQL 的架构模式

MySQL 是一个典型的C/S架构程序,MySQL Server提供数据库服务,完成客户端的请求和操作,Client负责连接到Server。

MySQL客户端可以是图形化界面,命令行,代码等,会根据指定的 IP 和 Port 连到服务器,通过一定的协议来进行 SQL 的执行。

SQL 执行过程

  1. 首先客户端发送请求到服务端,建立连接;
  2. 服务端先看下查询缓存是否命中,命中就直接返回,否则继续往下执行;
  3. 接着来到解析器,进行语法分析,一些系统关键字校验,校验语法是否合规;
  4. 然后优化器进行SQL优化,比如怎么选择索引之类,然后生成执行计划;
  5. 最后执行引擎调用存储引擎API查询数据,返回结果。

2. MySQL 的两个阶段

从 MySQL 的连接生命周期来划分,当服务器接收到客户端的请求连接后,将会进入两个阶段:

  • 连接阶段
  • 命令阶段

连接阶段

  • 确定客户端和服务器当前的版本功能
  • 确定是否需要进行 SSL 通信
  • 服务端进行客户端的身份认证

命令阶段
连接阶段验证成功后,将会进入该阶段,平常所见的 SQL 操作就是在这个阶段执行的。

3. MySQL 的 3 层架构

从逻辑架构上,MySQL 可以划分为 3 层:

  1. 连接层
  2. 服务层
  3. 存储引擎层


连接层其实也可以归入 Server 层,这样 MySQL 就分为 Server 层和存储引擎层两部分。

3.1 连接层

连接层位于MySQL体系架构的最上层,引入了线程池的概念,允许多台客户端连接。主要工作:

  • 连接处理
    • 当一个客户端向服务端发送连接请求后,MySQL server会从线程池中分配一个线程来和客户端进行连接,以后该客户端的请求都会被分配到该线程上
  • 用户鉴权
    • 当客户端向MySQL服务端发起连接请求后,MySQL server会对发起连接的用户进行鉴权处理,MySQL鉴权依据是: 用户名,客户端主机地址和用户密码
  • 安全管理
    • 当客户连接到MySQL server后,MySQL server会根据用户的权限来判断用户具体可执行哪些操作

3.1.1 连接器

当你连接到某个数据库上,这时候接待你的就是连接器。

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

3.2 服务层

数据库服务层是整个数据库服务器的核心,包括查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能。

  • 所有的内置函数(如日期、时间、数学和加密函数等)
  • 所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等
  • 该层会解析 SQL 语句并创建相应的内部解析树,并对其完成优化,如确定查询表的顺序,是否利用索引等,进而获得一个最优的执行计划
  • SELECT 操作会先检查是否命中查询缓存,命中则直接返回缓存数据。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能

3.2.1 查询缓存(Query cache)

MySQL的缓存是由一系列的小缓存组成的。例如:MySQL的表缓存、记录缓存、MySQL中的权限缓存、引擎缓存等。

MySQL中的缓存能够提高数据的查询性能,如果查询的结果能够命中缓存,则MySQL会直接返回缓存中的结果信息。

3.2.2 解析器(Parser)

主要负责对请求的SQL解析成一棵“解析树”,然后根据MySQL中的一些规则对“解析树”做进一步的语法验证,确认其是否合法。

3.2.3 优化器(Optimizer)

如果“解析树”通过了解析器的语法检查,优化器会分析存储引擎的操作成本以及表的统计信息,最后输出高效的执行计划。
比如在查询分析中,表扫描或索引扫描哪个执行效率高,则选择哪个。

3.2.4 执行器

MySQL 通过解析器知道了要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。

  1. 判断对这个表有没有查询权限;
  2. 有权限,则继续执行;
  3. 调用存储引擎接口进行执行查询或其他操作;
  4. 最终将查询结果集返回给客户端,语句执行完成。

3.3 存储引擎层

存储引擎负责实际的MySQL数据的存储与提取,服务器通过 API 与存储引擎进行通信。

不同的存储引擎功能和特性有所不同,这样可以根据实际需要有针对性的使用不同的存储引擎,像 InnoDB 支持事务、外键,而 MyISAM 就不支持。

一般我们不需要关心 SQL 语句会涉及到哪些存储引擎,只是优化器这一层可能需要根据不同的存储引擎做出不同的选择。

posted @ 2022-03-24 18:33  当康  阅读(76)  评论(0编辑  收藏  举报