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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 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
相关文章
|
13天前
|
安全 数据处理 数据安全/隐私保护
C/S架构与B/S架构的适用场景分析
C/S架构(客户端/服务器架构)与B/S架构(浏览器/服务器架构)在适用场景上各有特点,主要取决于应用的具体需求、用户群体、系统维护成本、跨平台需求等因素。
66 6
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
5天前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
17 2
|
13天前
|
存储 监控 安全
SaaS业务架构:业务能力分析
【9月更文挑战第20天】在数字化时代,软件即服务(SaaS)模式逐渐成为企业软件解决方案的首选。SaaS 业务架构设计对于提供高效、可靠的服务至关重要。其核心业务能力包括:用户管理(注册登录、角色权限)、数据管理(存储备份、安全共享)、业务流程管理(设计定制、工作流自动化)、应用集成(第三方应用、移动应用)及客户服务(支持培训、反馈改进)。通过优化这些能力,可为企业提供更高效、可靠的 SaaS 服务。
29 11
|
14天前
|
SQL 缓存 关系型数据库
揭秘MySQL一条SQL语句的执行流程
以上步骤共同构成了MySQL处理SQL语句的完整流程,理解这一流程有助于更有效地使用MySQL数据库,优化查询性能,及时解决可能出现的性能瓶颈问题。
35 7
|
21天前
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
53 6
|
21天前
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
41 1
|
2月前
|
存储 JSON 关系型数据库
MySQL与JSON的邂逅:开启大数据分析新纪元
MySQL与JSON的邂逅:开启大数据分析新纪元
|
18天前
|
缓存 负载均衡 数据管理
深入探索微服务架构的核心要素与实践策略在当今软件开发领域,微服务架构以其独特的优势和灵活性,已成为众多企业和开发者的首选。本文将深入探讨微服务架构的核心要素,包括服务拆分、通信机制、数据管理等,并结合实际案例分析其在不同场景下的应用策略,旨在为读者提供一套全面、深入的微服务架构实践指南。**
**微服务架构作为软件开发领域的热门话题,正引领着一场技术革新。本文从微服务架构的核心要素出发,详细阐述了服务拆分的原则与方法、通信机制的选择与优化、数据管理的策略与挑战等内容。同时,结合具体案例,分析了微服务架构在不同场景下的应用策略,为读者提供了实用的指导和建议。
|
2月前
|
消息中间件 负载均衡 Kafka
Kafka 实现负载均衡与故障转移:深入分析 Kafka 的架构特点与实践
【8月更文挑战第24天】Apache Kafka是一款专为实时数据处理和流传输设计的高性能消息系统。其核心设计注重高吞吐量、低延迟与可扩展性,并具备出色的容错能力。Kafka采用分布式日志概念,通过数据分区及副本机制确保数据可靠性和持久性。系统包含Producer(消息生产者)、Consumer(消息消费者)和Broker(消息服务器)三大组件。Kafka利用独特的分区机制实现负载均衡,每个Topic可以被划分为多个分区,每个分区可以被复制到多个Broker上,确保数据的高可用性和可靠性。
43 2
下一篇
无影云桌面