MySQL架构
创始人
2025-06-01 01:41:04
0

架构介绍

1.连接层

使用mysql。首先要与他进行连接,连接层主要完成一些类似建立连接、授权认证、和相关的安全方案。输入密码就成功建立了连接,可以用 show processlist 查看所有数据库的连接状态

连接状态,一般是休眠(sleep),查询(query),连接(connect),如果一条 SQL 语句是query状态,而且time时间很长,说明存在问题

在这里插入图片描述
客户端太长时间没动静就会自动断开,时间由参数 wait_timeout 控制的,默认是八小时

mysql> show variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set (0.00 sec)

连接数量也是有限的,最大连接数由参数 max_connections 控制

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

2.服务层

这一层架构完成了大部分的核心功能,包括查询解析、优化、缓存、还有所有的内置函数,所有的跨存储引擎的功能也都在这层实现,包括触发器、存储过程、视图等。

查询缓存

第一步的连接建立后,我们就可以执行 select 语句了。执行逻辑就会来到第二步:查询缓存。
MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端。
8.0版本后就移除该功能了

分析器

解析器会做如下两件事情
1.词法分析,MySQL 会根据你输入的字符串识别出关键字出来,构建出 SQL 语法树,这样方便后面模块获取 SQL 类型、表名、字段名、 where 条件等等。
2.语法分析根据词法分析的结果,语法解析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法。
如果我们输入的SQL语句语法不对,就会在这里报错

优化器

经过了分析器,就知道你要做什么了,但在执行前还要进行优化处理,如重写查询、决定表的读取顺序、选择合适的索引等等。

比如你执行下面这样的语句,这个语句是执行两个表的join:
select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;`
既可以先从表t1里面取出c=10的记录的ID值,再根据ID值关联到表t2,再判断t2里面d的值是否等于20。
也可以先从表t2里面取出d=20的记录的ID值,再根据ID值关联到t1,再判断t1里面c的值是否等于10。
这两种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。

执行器

MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。
开始执行的时候,先判断你有没有对这个表查询的权限,没有就会返回没权限的错误。
有权限就打开表继续执行,打开表时,执行器会根据表的引擎定义,去使用引擎提供的接口。

select * from T where ID=10;如我们这个例子中的表T中,ID字段没有索引,那么执行器的执行流程是这样的:调用 InnoDB 引擎接口取这个表的第一行,判断 ID 值是不是 10,如果不是则跳过,如果是则将这行存在结果集中;
调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。
执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。

至此,这个整个语句就执行完成了。一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。

SQL 接口

用于接收客户端发送的各种 SQL 命令,返回用户需要查询的结果,比如 DML、DDL、存储过程、视图、触发器这些

引擎层

存储引擎层,存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信。

不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。

存储层

数据存储层,主要是将数据存储在运行于该设备的文件系统之上,并完成与存储引擎的交互。

MySQL查询的大致流程

  1. MySQL 客户端通过协议与 MySQL服务器建连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析(MySQL 8.0 已取消了缓存)
  2. 有一系列预处理,比如检查语句是否写正确了,然后是查询优化(比如是否使用索引扫描,如果是一个不可能的条件,则提前终止),生成查询计划,然后查询引擎启动,开始执行查询,从底层存储引擎调用API 获取数据,最后返回给客户端。怎么存数据、怎么取数据,都与存储引擎有关。
  3. 然后,MySQL 默认使用的 BTREE 索引,并且一个大方向是,无论怎么折腾 sql,至少在目前来说,MySQL最多只用到表中的一个索引。

相关内容

热门资讯

还得加钱!利物浦报价维尔茨再遭... 北京时间6月2日消息,据德国媒体报道称,利物浦求购维尔茨的第二份报价遭到勒沃库森拒绝,药厂坚持要价1...
罗马诺:欧冠决赛的0-5惨败,... 直播吧6月2日讯 欧冠决赛,国际米兰0-5完败巴黎圣日耳曼,无缘冠军。据转会名记罗马诺透露,本场失利...
刚刚!港股下挫,A50跌超2%... 每经编辑|何小桃 受全球关税负面信息的打击,6月2日上午,亚太股市几乎全线下跌。 截至发稿,恒生...
原创 权... 作者:吕东平 摘要 在全球化与文明对话日益深入的今天,某些国家仍呈现出权力结构对法治原则的系统性侵...
分手后男子起诉按现金价折算金饰... 近日,宁夏同心县人民法院公布一起案例,2024年9月,宝某与周某经人介绍相识并按照习俗结婚,宝某依习...
连连数字盘中一度涨超78% 香... 连连数字(02598)盘中一度涨超78% ,高见18港元,股价创新高,截至发稿,股价上涨65.47%...
官员饮酒聚餐致死,安徽:绝不姑... 据《安徽日报》报道,6月1日晚,安徽省委常委会召开会议,传达学习中央层面深入贯彻中央八项规定精神学习...
3名干部被查,均已退休,年龄最... 原江西省工业和信息化委员会党组成员、副主任杨人平被查 据江西省纪委监委5月30日消息:原江西省工业和...
曼联门神奥纳纳爆转会!沙特土豪... 各位球迷朋友们,转会市场这潭水啊,是越来越深,越来越浑!今儿个咱聊聊曼联的门神——安德烈·奥纳纳。这...
女子搬新家遭邻居多次持刀砍门,... 极目新闻记者 王柳钦 近日,有辽宁大连的网友发视频称,疑似患精神疾病的邻居多次持刀上门,用刀砍其家门...