Mysql 体系结构

网上找的一张 Mysql 逻辑架构图

整个 Mysql 逻辑架构大致可以分为 网络连接层、数据库服务层、存储引擎层、文件系统层

一、网络连接层
客户端连接器(Mysql Connectors) 是 Mysql 官方为各种开发语言和平台提供的访问 Mysql 数据库的驱动程序,它实现了对应语言访问数据库的标准接口规范,隐藏了底层的数据库访问细节,提供了统一的 API 接口,这样开发者就可以方便高效地在各种语言中访问和操作 Mysql 数据库了

二、数据库服务层
数据库服务层是整个数据库服务器的核心,主要包括 系统控制和管理工具、连接池、SQL 接口、缓存、解析器、优化器 等部分,这一层涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等)所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等

1、系统控制和管理工具

提供数据库系统的管理和控制功能,例如对数据库中的数据进行备份和恢复,提供安全管理,对整个数据库的集群进行协调和管理等

2、连接池

负责监听 Mysql 客户端对服务端的各种请求,接收并转发这些连接请求到线程管理模块.线程管理模块会为每一个连接上 Mysql 服务端的请求分配(或新建)一个连接线程,连接线程的主要工作就是负责 Mysql 服务端与客户端的通信,接收客户端的命令请求,传递服务端的结果信息等,而线程管理模块负责管理和维护这些连接线程,包括线程的创建、销毁、缓存等

3、SQL 接口

接收服务端发送的 SQL 命令、返回服务端响应的查询结果

4、查询缓存

将 Mysql 客户端提交过来的 select 类型的 SQL 语句做一个 hash 运算,得到的 hash 值和其查询返回的结果集以 key-value 的形式缓存到内存中,需要注意的查询缓存的失效非常频繁,只要有对一个表的更新,那么这个表上所有的查询缓存都会被清空

5、解析器

MySQL 解析器主要负责 SQL 语句的初级语法分析,是后续优化、执行等重要阶段的基础.任何语法错误都会在解析阶段被发现并报告.它与 SQL 优化器、执行器等组件协同工作,完成整个 SQL 查询流程,其主要功能如下

  • 语法解析: 将 SQL 语句按照 MySQL 的语法规则解析成内部表示,识别出 SELECT、FROM、WHERE 等各个子句及其中的表名、列名等语法元素
  • 语法检查: 检查 SQL 语句的语法结构是否正确,比如关键字是否正确使用,括号是否匹配等
  • 标识符验证: 验证 SQL 语句中使用的表名、列名等标识符是否合法,是否存在
  • 预处理: 对 SQL 语句进行预处理,如参数化、缓存等操作,优化后续执行效率
  • 语法树构建: 根据解析结果构建 SQL 语句的语法树表示
  • 生成错误报告: 在解析或验证过程中发现错误,报告具体错误信息
  • 交互 SQL 优化器: 将经过解析的 SQL 语句交给 SQL 优化器进行逻辑和物理优化

解析器的作用就是解析一条 SQL 语句要做什么

6、优化器

MySql 优化器可以为复杂查询生成最优执行计划,以便高效执行查询操作,其主要功能如下

  • 逻辑优化: 根据 SQL 语句内容和数据库结构,选择最优的查询逻辑计划,如选择最优的表连接顺序等
  • 物理优化: 根据数据库物理存储情况,选择最优的访问方法,如选择索引、表扫描等物理操作
  • 执行计划生成: 根据优化结果生成最终的执行计划,该计划将驱动后续的查询执行
  • 统计信息利用: 利用统计信息库(如索引信息、表大小等)进行优化决策
  • 规则匹配: 应用各种优化规则对 SQL 进行重构,比如条件下推、投影列上推等
  • 代价模型: 根据各种操作成本估算生成代价最低的执行计划
  • 执行计划缓存: 缓存优化结果,避免重复优化,提高效率

优化器的作用就是告诉执行器这条 SQL 该怎么做

7、执行器

MySQL 执行器是 MySQL 服务器中负责执行 SQL 语句的重要组成部件,其主要功能如下

  • 接收执行计划: 从 MySQL 优化器接收到优化后的执行计划
  • 执行基本操作: 执行基本的查询操作,如表扫描、索引访问、表连接、过滤等
  • 结果处理: 处理查询结果,如排序、限制行数、返回格式处理等
  • 缓存管理: 利用缓存技术(如索引缓存、查询缓存等)提高执行效率
  • 并发控制: 支持多线程并发执行,控制并发度对性能的影响
  • 事务管理; 支持事务隔离级别设置和提交/回滚操作
  • 存储引擎接口: 通过存储引擎接口层操作不同的存储引擎如InnoDB等
  • 结果返回: 将最终查询结果返回给客户端
  • 执行统计: 收集执行统计信息,用于后续优化

三、存储引擎层

MySQL 存储引擎层是 MySQL 数据库系统的重要组成部分,主要负责对数据的存储和提取,它位于 MySQL 服务器与具体数据文件之间,提供抽象的数据访问接口,其主要特点如下

  • 提供统一的表和行级数据访问接口,包括表创建、数据插入、更新、删除等基本 CRUD 操作
  • 支持多种存储引擎实现,如 InnoDB、MyISAM 等.不同引擎实现同一接口以不同方式存储和管理数据
  • 存储引擎负责具体的数据存储格式,索引实现方式等物理层面细节,对上层 MySQL 服务器透明
  • 存储引擎可以独立扩展,不影响 MySQL 服务器其他模块,如添加新引擎不需要重写服务器代码
  • 存储引擎通过插件方式加载,动态注册支持的表类型.服务器通过接口与不同引擎交互
  • 提供事务支持,锁机制,查询缓存等高级功能,由不同引擎以不同方式实现
  • 统一管理引擎间的数据同步和一致性,实现多引擎表操作的一致性语义

四、文件系统层

将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互

 

 

posted @ 2023-10-14 16:43  变体精灵  阅读(25)  评论(0编辑  收藏  举报