二、MYSQL逻辑架构

一、Server/Client

# Server端
- mysqld,安装在Linux主机服务器上
- 存储具体数据, 数据管理系统
- 监听网络客户端的请求,并根据请求去读写数据库数据,将结果返回给客户端

# Client端
- 连接数据库,发送sql请求到服务端,获取服务端响应结果
- Navicat,JDNBC等
- 安装mysql后,自带命令行,其实就是进入了mysql的客户端界面


# 模式优点
1. 强制执行并发控制:      多个Client端同时访问Server端,只需把多个请求发给Server端,
                        由Server端确定如何执行    
2. 数据存储和数据访问分离: Server端在某个服务器上,但Client端可在任何地方访问

二、架构图

在这里插入图片描述
在这里插入图片描述

1.Connectors

  • 不同语言与SQL的交互
  • MYSQL是一个网络程序,在TCP上定义了自己的应用层协议。要使用MYSQL, 通过代码与MYSQL SERVER建立TCP链接
  • 调用SDK,比如JDBC, Native C API, 本质上就是在TCP连接上通过MYSQL协议和MYSQL交互

2. MYSQL Server

2.1 连接层

  • 系统(客户端)访问MYSQL服务器前,首先建立TCP链接
  • 通过三次握手建立成功后,MYSQL服务器对TCP传输过来的账户密码进行身份验证,权限获取
- 用户名密码不对,返回Access Denied for User 错误, 客户端程序结束执行
- 用户名密码正确,从权限表中查处账户拥有的权限与连接关联
链接数:
- 多个系统,会多次和MYSQL服务器建立链接
- 无限创建与TCP频繁创建带来资源耗尽,性能下降
- MYSQL服务器有 TCP链接池限制链接数,采用长链接模式复用TCP链接

2.2 服务层

SQL Interface
- 接收用户的SQL命令,返回用户需要查询的结果

Parser
- 解析SQL语句进行语法分析和词法分析,将SQL分解成数据结构,并将结构传递到后续步骤。
- 创建好语法树

Optimizer
- 解析后,会根据查询优化器确定SQL的执行顺序,生成一个执行计划

Cache&Buffer
-  如果执行了一条语句,如果在缓存中找到对应的查询结构,那么就直接返回
- 可以在不同客户端之间共享
- 在MYSQL8.0中删除,因为命中率比较低

3. 引擎层

  • 插件式的存储引擎,可以在不同业务场景下使用不同的存储引擎,也可以开发自己的存储引擎
  • 负责MYSQL中数据的存储和提取,对物理服务器级别维护的底层数据执行
SHOW ENGINES;

MEMORY
InnoDB
PERFORMANCE_SCHEMA
MyISAM
MRG_MYISAM
BLACKHOLE
CSV
ARCHIVE

三、MYSQL执行流程

在这里插入图片描述

1. 查询缓存

  • Server如果在查询缓存中发现了这条SQL语句,就会直接将结果返回给客户端,如果没有,就进入解析器阶段
  • 查询缓存效率往往不高,MYSQL-8.0弃用该功能
- 之前执行的结果,会通过k-v形式缓存在内存中, k是查询语句,v是查询结果
- 查询执行完成后,执行结果会被存入查询缓存中

1. 两个查询语句在空格,大小写,注释不同时,都会认为是两个不同的k,因此命中率低
2. 查询请求中包含某些系统函数时,比如now,都不会进行缓存
3. 缓存失效:mysql缓存系统会监控涉及到的每个表,表结构数据改变时,缓存就会从高速缓存中
   删除,对于更新压力大的数据库来说,查询缓存的命中率会非常低

在这里插入图片描述

2. 解析器/Parser

  • 对SQL进行分析
  • 词法分析:分析SQL字符串中,关键字,表名,列名,空格等
  • 语法分析:根据词法分析的结果,语法分析器会根据语法规则,判断语法是否正确
  • 如果语法错误,则会 ‘ You hava an error in your SQL syntax’
  • 如果语法正确,则会生成一个语法树

3. 优化器

  • 经过解析器,MYSQL就知道该条SQL到底要执行什么事
  • 一条查询可以有很多执行方式,并返回相同结果,优化器的作用就是找到其中最好的路径
  • 优化完毕后,生成一个执行计划
  • 比如全表检索或者根据索引检索

4. 执行器

  • 执行前需要判断该用户是否具备权限,如果没有则返回权限错误。如果有则执行SQL查询并返回结果
  • 存储引擎API只是抽象接口,下面还有存储引擎层,具体实现要看表选择的存储引擎

5. 存储引擎

  • 去调用下层的具体的文件系统,来实现读写操作
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值