文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MYSQL逻辑架构

2023-09-28 14:55

关注

文章目录

MYSQL逻辑架构

1. 逻辑架构剖析

1.1.1 MYSQL的逻辑架构—三层

MYSQL逻辑架构:一共三层。下图针对MYSQL5.0,在MYSQL8.0中没有了Cache&Buffers查询缓存。具体展开如下图:

具体查询执行顺序:
在这里插入图片描述

  1. MYSQL客户端程序发起连接
  2. 利用连接池建立连接,并分配线程处理请求
  3. SQL接口:接收SQL指令
  4. MYSQL5.0:查询缓存,有key直接返回(MYSQL8.0中没有这一步
  5. 缓存中没有,则在解析器中进行sql解析,并生成语法树
  6. 核心:在优化器中进行逻辑优化或物理优化物理索引是指使用索引。sql语句在语法解析之后、查询之前会使用查询优化器确定sql语句执行路径,生成一个 执行计划
  7. 调用对应的API,即存储引擎
  8. 文件系统中进行查找(会先将物理层文件加载到内存中buffer库缓冲池,直接与磁盘交互代价太大)
  9. MYSQL5.0:将查询结果已key-value形式缓存到查询缓存
  10. 最后,通过SQL接口将查询结果返回到连接池,再返回到客户端

1.1.2 连接层—第一层

连接层Connection Pool获取MYSQL服务层连接

1.1.3 服务层—第二层

服务层(核心):SQL Interface(SQL接口)、Parser(解析器)、Optimizer(优化器)、Cache&Buffer(查询缓存-mysql5.0有)

1.1.4 引擎层—第三层

引擎层:Pluggable Storage Engines(插件式的存储引擎)

2 服务器处理客户端请求—三部分

MYSQL是典型的C/S架构,即Client/Server架构,服务器端程序使用的mysqld。

不论客户端进程和服务器进程采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(SQL语句)服务器进程处理后再向客户端进程发送一段文本(处理结果)

服务器进程对客户端进程发送的请求处理过程如下图:在这里插入图片描述

3. SQL执行流程

3.0 SQL语法顺序

随着Mysql版本的更新换代,其优化器也在不断的升级,优化器会分析不同执行顺序产生的性能消耗不同而动态调整执行顺序。

例:查询每个部门年龄高于20岁的人数且高于20岁人数不能少于2人,显示人数最多的第一名部门信息下面是经常出现的查询顺序:
在这里插入图片描述

3.1 MYSQL中的SQL执行流程

在这里插入图片描述
SQL 语句在 MySQL 中的流程是: SQL语句查询缓存解析器优化器执行器
在这里插入图片描述

3.1.1 查询缓存

查询缓存: Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段在这里插入图片描述

MYSQL8.0抛弃原因: 查询缓存往往效率不高,所以在 MySQL8.0 之后就抛弃了这个功能

3.1.2. 解析器

解析器:在解析器中对 SQL 语句进行语法分析语义分析
在这里插入图片描述

  1. 分析器先做“ 词法分析 ”。你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。 MySQL 从你输入的 select” 这个关键字识别出来,这是一个查询语句。它也要把字符串“T”识别成“表名 T”,把字符串“ID”识别成“列 ID”。

    词法分析步骤:在这里插入图片描述

  2. 接着,要做“ 语法分析 ”。根据词法分析的结果,语法分析器(比如:Bison)会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法

    select department_id,job_id,avg(salary) from employees group by department_id;
    • 如果语法错误,会报错:在这里插入图片描述

    • 如果SQL语句正确,则会生成一个这样的语法树在这里插入图片描述

3.1.3. 优化器
3.1.3.1 优化器作用

优化器:在优化器中会 确定SQL 语句的执行路径,比如是根据 全表检索 ,还是根据 索引检索 等。

经过解析器,MYSQL知道了你要做什么。在开始执行之前,还要经过优化器的处理。一条查询可以有很多执行方式,最后都返回相同的结果优化器的作用就是找到其中最好的执行计划在这里插入图片描述

3.1.3.2 逻辑查询(sql等价变换)和物理查询(索引)

在查询优化器中,可以分为 逻辑查询 优化阶段和 物理查询 优化阶段。

3.1.4. 执行器

截止到现在,还没有真正去读写真实的表,仅仅只是产出了一个执行计划。于是就进入了 执行器阶段
在这里插入图片描述
在这里插入图片描述

在执行之前需要判断该用户是否 具备权限 如果没有,就会返回权限错误。如果具备权限,就执行 SQL查询并返回结果

在 MySQL8.0 以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。

SQL 语句在 MySQL 中的流程是: SQL语句查询缓存解析器优化器执行器
在这里插入图片描述

3.2. MYSQL8中SQL执行原理–实操

在MYSQL中对一条SQL语句的执行时间进行分析:

3.2.1 数据准备

在数据库中导入SQL脚本:atguigudb.sql,或者打开直接执行在database中执行

在这里插入图片描述
导入数据库成功:
在这里插入图片描述

3.2.1 确认profiling 是否开启
3.2.2 多次执行相同sql语句

多次执行查询语句:select * from employees;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.3 查看当前会话所产生的所有 profiles
3.2.4 查看profile-执行计划
3.2.5 查看更丰富的内容

3.3. MYSQL5.0中SQL执行原理(了解)

上述操作在MySQL5.7中测试,发现前后两次相同的sql语句,执行的查询过程仍然是相同的。不是会使用缓存吗?这里我们需要 显式开启查询缓存模式 。在MySQL5.7中如下设置:

  1. 配置文件中开启查询缓存
    在 /etc/my.cnf 中新增一行:query_cache_type=1

  2. 重启mysql服务:systemctl restart mysqld

  3. 开启查询执行计划:
    由于重启过服务,需要重新执行如下指令,开启profiling。

    set profiling=1;
  4. 执行查询语句两次:

     select * from locations;
  5. 查看profiles在这里插入图片描述

  6. 查看profile,显示执行计划,查看程序的执行步骤:show profile for query 1;
    在这里插入图片描述

     show profile for query 2;

    在这里插入图片描述
    结论:执行编号2时,比执行编号1时少了很多信息,从截图中可以看出查询语句直接从缓存中获取数据。

结论: 在MYSQL5.0中重复查询会先直接从缓存中获取数据

注意:

3.4. Oracle中的SQL执行流程(了解)—共享池

Oracle 和 MySQL 在进行 SQL 的查询上面有软件实现层面的差异。

Oracle 中采用了 共享池 来判断 SQL 语句是否存在缓存和执行计划,通过这一步骤我们可以知道应该采用硬解析还是软解析。

4. .数据库缓冲池(buffer pool)

4.1 缓冲池作用

4.2 缓冲池 vs 查询缓存

4.2.1 缓冲池(Buffer Pool)

在 InnoDB 存储引擎中有一部分数据会放到内存中,缓冲池则占了这部分内存的大部分,它用来存储各种数据的缓存。InnoDB 缓冲池 包括了数据页、索引页、插入缓冲、锁信息、自适应 Hash 和数据字典信息等,如下图所示:在这里插入图片描述
缓存池的重要性:

4.2.2 查询缓存—MYSQL8.0无

查询缓存是提前把 查询结果缓存 起来,以key-value的形式,这样下次不需要执行就可以直接拿到结果。需要说明的是,在MySQL5.0 中的查询缓存,不是缓存查询计划,而是查询对应的结果。因为命中条件苛刻,而且 只要数据表发生变化,查询缓存就会失效,因此命中率低

4.2.3 缓冲池如何读取数据

缓冲池管理器会尽量将 经常使用的数据保存 起来(即必要数据或热点数据放到缓冲池),在数据库进行页面读操作的时候,首先会判断该页面是否在缓冲池中,如果存在就直接读取,如果不存在,就会通过内存或磁盘将页面存放到缓冲池中再进行读取。

缓存在数据库中的结构和作用如下图所示:
在这里插入图片描述

4.2.4 查看/设置缓冲池的大小
4.2.5 多个Buffer Pool实例
4.2.6 引申问题

Buffer Pool是MySQL内存结构中十分核心的一个组成,你可以先把它想象成一个黑盒子。

Buffer Pool黑盒下的更新数据流程如下:

这个过程实则有问题!!!!!

来源地址:https://blog.csdn.net/weixin_46592197/article/details/133269534

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯