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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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
相关文章
|
8天前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
53 3
Mysql高可用架构方案
|
24天前
|
JSON JavaScript 前端开发
Vue3源码架构简析及Monorepo流程构建
【10月更文挑战第12天】Vue3源码架构简析及Monorepo流程构建
Vue3源码架构简析及Monorepo流程构建
|
3天前
|
SQL 存储 缓存
【赵渝强老师】MySQL的体系架构
本文介绍了MySQL的体系架构,包括Server层的7个主要组件(Connectors、Connection Pool、Management Service & Utilities、SQL Interface、Parser、Optimizer、Query Caches & Buffers)及其作用,以及存储引擎层的支持情况,重点介绍了InnoDB存储引擎。文中还提供了相关图片和视频讲解。
【赵渝强老师】MySQL的体系架构
|
9天前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
10天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
46 4
|
12天前
|
存储 SQL NoSQL
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1615 14
|
20天前
|
存储 关系型数据库 MySQL
基于案例分析 MySQL 权限认证中的具体优先原则
【10月更文挑战第26天】本文通过具体案例分析了MySQL权限认证中的优先原则,包括全局权限、数据库级别权限和表级别权限的设置与优先级。全局权限优先于数据库级别权限,后者又优先于表级别权限。在权限冲突时,更严格的权限将被优先执行,确保数据库的安全性与资源合理分配。
|
29天前
|
存储 SQL 分布式计算
湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
【10月更文挑战第7天】湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
46 1
|
1月前
|
SQL 关系型数据库 MySQL
MySQL 更新1000万条数据和DDL执行时间分析
MySQL 更新1000万条数据和DDL执行时间分析
87 4

推荐镜像

更多