首页 > 数据库 >Mysql 体系结构

Mysql 体系结构

时间:2023-10-14 16:55:35浏览次数:39  
标签:存储 缓存 Mysql 引擎 SQL 优化 体系结构

网上找的一张 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 服务器其他模块,如添加新引擎不需要重写服务器代码
  • 存储引擎通过插件方式加载,动态注册支持的表类型.服务器通过接口与不同引擎交互
  • 提供事务支持,锁机制,查询缓存等高级功能,由不同引擎以不同方式实现
  • 统一管理引擎间的数据同步和一致性,实现多引擎表操作的一致性语义

四、文件系统层

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

 

 

标签:存储,缓存,Mysql,引擎,SQL,优化,体系结构
From: https://www.cnblogs.com/xiaomaomao/p/17688531.html

相关文章

  • Mysql 5.7和Mysql 8到底有哪些差异?一文看懂
    大家好,我是老七,点一点“关注”,将持续更新更多精彩内容!引言MySQL作为最常用的开源关系型数据库管理系统之一,一直在不断发展和改进。随着时间的推移,MySQL也经历了多个版本的演进,每个版本都带来了一系列重要的更新和改进。其中,MySQL5.7和MySQL8是两个备受关注的版本,它们之间存在一些......
  • MySQL分组聚合
    --创建hq_kline表deletefromhq_klineCREATETABLEhq_kline(idINTAUTO_INCREMENTPRIMARYKEY,finance_micVARCHAR(16)NOTNULL,prod_codeVARCHAR(64)NOTNULL,trade_dateINTNOTNULL,data_timestampINTNOTNULL,preclose_pxDECI......
  • 索引是不是建的越多越好?MySQL索引用的什么数据结构?一棵B+树能存储多少条数据?
    一、索引是不是建的越多越好当然不是。索引会占据磁盘空间索引虽然会提高查询效率,但是会降低更新表的效率。比如每次对表进行增删改操作,MySQL不仅要保存数据,还有保存或者更新对应的索引文件。二、MySQL索引用的什么数据结构MySQL的默认存储引擎是InnoDB,它采用的是B+树结构的索引......
  • LINUX:sqoop连接:ERROR manager.CatalogQueryManager: Failed to list databases com.my
    可见是连接的jar包出现了错误  通过命令发现我的是5.7版本,将驱动jar包替换为5.几的  之后通过命令成功解决......
  • MySQL学习(5)记录存在那里——表空间
    前言存储引擎都是把数据存储在文件系统上,通过通过查询命令,可以查看数据目录所在的本机路径。mysql>SHOWVARIABLESLIKE'datadir';+---------------+-----------------+|Variable_name|Value|+---------------+-----------------+|datadir|/var/l......
  • 将excel文件导入到Navicat的mysql中步骤详解
    将转换好的csv文件导入到Navicat中1、右键数据库中表的名称,选中导入向导:2、之后选择导入的文件结构:我们在这里选中excel类型;点击下一步;3、浏览到excel文件的路径然后选中该表:点击下一步;4、自定义一些附加选项点击下一步;5、选中这个新建表然后点击下一步;6、修改表......
  • MySQL删除表的命令是什么
    MySQL删除表命令:删除表命令是DROPTABLE,其基本语法如下:删除单个表DROPTABLEtable_name;注:这个命令会直接删除指定表,如果这个表不存在就会报错。另外,删除表之前最好做好备份。同时删除多个表DROPTABLEtable_name1,table_name2,...;注:这个命令可以同时删除多张......
  • 文件默认打开方式 + mysql导入错误 + 输入法问题
    文件默认打开方式默认应用修改:设置—》应用—》默认应用—》按文件类型指定默认应用mysql导入错误Unknowncollation:'utf8mb4_0900_ai_ci'Mysql导入sql文件时,出Unknowncollation:'utf8mb4_0900_ai_ci'错误。原因:sql文件是从高版本mysql(8.0)中导出的,导入到......
  • mysql数据库性能优化
    数据库的性能优化可以从以下几个方面进行优化:1.硬件和操作系统:硬件可以从cpu、内存、I/O,网络带宽等方面进行优化。系统层可以从文件句柄数,网络配置等方面2.数据库的架构:比如主从集群以及主从架构的变种可以做高可用及容灾,读写分离可以避免读操作比较高的服务影响数据写入,分库分表......
  • 深入理解MySQL中的Join算法
    本文已收录至GitHub,推荐阅读......