【MySQL】逻辑架构及执行流程

1. 逻辑架构1.1 连接层  MySQL服务器与客户端建立 TCP 连接后,对客户端传来的账号密码进行验证和鉴权:用户名或密码错误时,返回Access denied for user错误,客户端程序结束执行;用户名和密码正确时,再从权限表查出账号拥有的权限,用于后续鉴权。  每一个连接从线程池中获取线程,连接断开后归还,节省了创建和销毁线程的开销。1.2 服务层SQL Interface  接收客户端的SQL语句,并且向客户端返回执行结果。 Parser  对SQL 语句进行语法分析、语义
摘要由CSDN通过智能技术生成

1. 逻辑架构

MySQL逻辑架构图
MySQL执行流程

1.1 连接层

  MySQL服务器与客户端建立 TCP 连接后,对客户端传来的账号密码进行验证和鉴权:用户名或密码错误时,返回Access denied for user错误,客户端程序结束执行;用户名和密码正确时,再从权限表查出账号拥有的权限,用于后续鉴权。
  每一个连接从线程池中获取线程,连接断开后归还,节省了创建和销毁线程的开销。

1.2 服务层

1.2.1 SQL Interface
  接收客户端的SQL语句,并且向客户端返回执行结果。
1.2.2 Caches & Buffers 查询缓存
  MySQL内部维持着一些Cache和Buffer,可以在不同客户端之间共享。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等 。
  Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段。
从MySQL 5.7.20开始,不推荐使用查询缓存,MySQL 8.0删除了查询缓存。具体原因如下:

  • 缓存命中率低: 查询缓存是把查询结果缓存起来,而不是缓存查询计划。两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。
  • 某些请求不会被缓存: 如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如 mysql 、 information_schema、performance_schema数据库中的表,那这个请求就不会被缓存。以某些系统函数举例,可能同样的函数的两次调用会产生不一样的结果,比如函数NOW,每次调用都会产生最新的当前时间。
  • 缓存失效: MySQL的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修改,如对该表使用了 INSERT 、 UPDATE 、 DELETE、TRUNCATE TABLE 、ALTER TABLE 、DROP TABLE 或 DROP DATABASE语句,那使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除!对于更新压力大的数据库来说,查询缓存的命中率会非常低。

1.2.3 Parser 解析器
在解析器中对 SQL 语句进行语法分析、语义分析:

  1. 先做“ 词法分析 ”,识别出SQL里面的字符串分别是什么:将"select"关键字识别为一个查询语句,它也要把字符串“T”识别成“表名 T”,把字符串“ID”识别成“列ID”。
  2. 再做“ 语法分析 ”:对于词法分析的结果,语法分析器判断是否满足MySQL语法 。
    同时,会验证该客户端是否具有执行该SQL语句的权限 。解析完成后,生成如下语法树:
    在这里插入图片描述

1.2.4 Optimizer 优化器
决定使用哪些索引,以及表之间的连接顺序,生成执行计划。
1.2.5 执行器
在执行之前需要判断该用户是否具备权限 。如果没有就会返回权限错误。如果具备权限,就执行 SQL查询并返回结果。在 MySQL8.0 以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。
在这里插入图片描述

1.3 引擎层

真正的负责了MySQL中数据的存储和提取,对物理服务器级别维护的底层数据执行操作,服务器通过API与存储引擎进行通信。5.7.37 和8.0.25 版本默认支持的存储引擎如下:

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值