MySQL基础架构和执行流程分析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL基础架构和执行流程分析

MySQL执行一条插入语句或者查询语句,实际上会经过哪些流程和部件,MySQL的架构是怎么样的,本文就一起从一条查询语句的执行流程开始来揭开面纱。

如以下的执行语句:

select * from test where a=1;

从我们初步使用sql我们知道,首先我们需要连接上mysql server,然后需要拥有对于表的查询权限,再然后是对查询语句做分析查询对应表的数据,返回结果,这在mysql中对应着几个特定的功能模块。

一、逻辑架构

MySQL Server逻辑架构如下图所示,分为连接器、查询缓存、分析器、优化器、执行器和存储引擎。

二、各组件功能

1.1 连接器

管理客户端的连接,进行相关的权限验证。这是数据库查询的第一步,当你输入以下命令尝试尝试连接数据库的时候就是会与连接器打交道,连接器在建立连接以后会查询权限表获得用户的相关权限,并且将此连接对应的权限缓存记录起来,后续这个mysql连接的操作都依赖于此时的权限,在建立连接以后即便重新修改权限,对于此连接也不会生效。

mysql -h$host -P$port -u$user -p

当连接完成以后,可以通过以下命令查看连接的状态:

show processlist;

客户端到server的连接如果一直没有请求,那么经历了一段时间以后连接会被关闭,连接被关闭以后如果客户端继续发起请求就会收到一个错误提醒:  Lost connection to MySQL server during  query。这个超时时间一般由参数wait_timeout指定,通过以下sql可以查询:

show variables like '%wait_timeout%';

一般来说数据库连接池组件都会有一些保活的机制,例如使用select 1语句定期探测。

MySQL中的连接分为长连接和短连接:长连接是指客户端的多次请求可以使用同一个连接,而短连接是每次请求后都断开连接,当下次请求来临又重新建立连接。短连接这种方式十分的消耗资源,一般建议使用长连接。

当然长连接的使用也会有些问题,MySQL执行过程中临时使用的内存是管理在连接对象里面的,当较长的时间连接不能释放的话,就会有造成OOM的可能。可以有两种解决方案:

1、MySQL5.7及以上版本,执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

2、定期断开长连接。一般来说数据库连接池都会有相关的机制配置,例如druid连接池maxAge的配置。

1.2 查询缓存

在MySQL中,每次查询语句的结果会被缓存,以key-value的形式存储,当相同的语句查询时就直接从缓存中获取响应数据返回,提升性能。

但是查询缓存有比较大的弊端,因为任何对于表的更新都会导致缓存失效,所以缓存命中率很低,只适合静态表数据或者更新情况非常少的数据,例如配置表。鉴于此情况,这个功能在MySQL8.0就被移除了,在此不再赘述。

1.3 分析器

分析器分为词法分析和语法分析,一条SQL语句首先需要进行词法分析,确定SQL的各个字段的含义,例如表名、字段名。完成词法分析以后就是进行语法分析,判断所写的语句是否符合MySQL的语法要求,如果不满足规范要求,会抛出以下错误信息:

You have an error in your SQL syntax

完成分析以后就会转入优化器环节处理。

1.4 优化器

一条语句执行过程中连接表的顺序,是否使用到索引,使用哪个索引,这些就是在优化器中决定的,优化器根据一定的规则确定一条语句实际的执行计划,生成执行计划以后通过执行器实际执行。

1.5 执行器

执行器作为Server层与存储引擎层的交互,它接收优化器优化后的实际执行语句,调用对应的存储引擎接口,获取返回的结果。在执行语句之前执行器会校验用户对于表的操作权限,如果符合才继续往下执行,为了获得某个结果集,执行器可能会多次的调用存储引擎的接口直到获取到所需要的结果集为止,在数据库的慢查询日志中可以看到一个  rows_examined 的字段,表示这个语句执行过程中扫描了多少行,这个值就是在执行器每次调用引擎获取数据行的时候累加的。

在使用explain语句查询sql的执行计划的时候也可以看到一个rows字段,也是类似的预估执行器在执行语句的过程中可能扫描的行数,只是这个数据只是一个预估并不准确。

注意,执行器调用一次,在存储引擎内部可能扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同的。

1.6 存储引擎

存储引擎是负责底层数据的存储,提供对外的读写接口,在MySQL中这是一个可插拔的设计,这可以说是MySQL流行的一个十分重要的原因。这种可插拔的设计使得My  SQL支持多种存储引擎,可以适应不同的场景需要,例如默认的InnoDB,MyISAM和Memory等。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
SQL 存储 缓存
MySQL执行流程
本文介绍了MySQL的执行流程,分为server层和引擎层。server层包含连接器、查询缓存、解析器、预处理器、优化器等组件,负责SQL的接收、解析、优化及执行;引擎层负责数据的存储与读取。文章详细解释了各组件的功能,如连接器负责用户身份认证,查询缓存提高查询效率,解析器进行SQL的词法和语法分析,预处理器验证表和字段的存在性,优化器选择最优执行计划,最终由查询执行引擎完成查询并将结果返回给客户端。
MySQL执行流程
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
139 3
Mysql高可用架构方案
|
2月前
|
JSON JavaScript 前端开发
Vue3源码架构简析及Monorepo流程构建
【10月更文挑战第12天】Vue3源码架构简析及Monorepo流程构建
Vue3源码架构简析及Monorepo流程构建
|
22小时前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
25 11
|
1天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1月前
|
SQL 存储 缓存
【赵渝强老师】MySQL的体系架构
本文介绍了MySQL的体系架构,包括Server层的7个主要组件(Connectors、Connection Pool、Management Service & Utilities、SQL Interface、Parser、Optimizer、Query Caches & Buffers)及其作用,以及存储引擎层的支持情况,重点介绍了InnoDB存储引擎。文中还提供了相关图片和视频讲解。
【赵渝强老师】MySQL的体系架构
|
15天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
1月前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
76 4
|
1月前
|
存储 SQL NoSQL