【高级篇04】MySQL逻辑架构

news2024/12/24 2:45:15

文章目录

  • 第四章:逻辑架构
    • 逻辑架构
    • SQL执行流程
    • 数据库缓冲池

第四章:逻辑架构

逻辑架构

  • 第一层:连接层。客户端访问MySQL服务器,首先建立TCP连接,经过三次握手建立连接成功后,MySQL服务器对TCP传输过来的账号密码做身份认证、权限获取。
  • 第二层:服务层。
    • SQL Interface :SQL接口。接收SQL命令、返回查询结果。
    • Parser:解析器。对SQL语句进行语法分析、语义分析。创建语法树
    • Optimizer:查询优化器。生成执行计划,表明应该使用哪些索引进行查询。
    • Caches & Buffers:查询缓存组件。从MySQL 5.7.20开始,不推荐使用查询缓存,并在 MySQL 8.0中删除 。
  • 第三层:插件式存储引擎层。负责MySQL中数据的存储和提取。与数据库文件进行通信。
    在这里插入图片描述

SQL执行流程

  1. 查询缓存。如果在查询缓存中发现了这条SQL语句,就会直接将结果返回给客户端。

    但MySQL的查询缓存命中率不高。因为查询缓存所缓存的是查询计划,所以只有完全相同的查询操作才会命中查询缓存,所以在MySQL8.0之后抛弃。

  2. 解析器。分析器先做“词法分析”,分析你输入的字符串代表什么;之后做“语法分析”,根据语法规则,判断输入的SQL语句,是否满足MySQL语法,生成语法树。
    在这里插入图片描述

  3. 优化器:在优化器中确定SQL语句的执行路径,交出执行计划给执行器。

  4. 执行器:执行之前判断该用户是否有权限。如果没有,就返回权限错误。如果具备权限,就执行SQL查询(调用存储引擎接口)并返回结果。

    在这里插入图片描述
    图:SQL的执行流程

MySQL中的Profiling工具,通过该工具可以获取一条SQL语句在执行过程中多种资源的消耗情况,如CPU、IO、程序的执行步骤等等。

set profiling=1; # 设置工具打开
select * from employees; # 执行查询
show profile; # 显示执行计划,查看程序的执行步骤

在这里插入图片描述

图:select * from employees 的执行步骤

数据库缓冲池

InnoDB存储引擎是以页为单位来管理存储空间的,我们进行的增删改查操作基本都是在访问页面。

MySQL会申请占用内存来作为数据库缓冲池,将磁盘中的页缓存到内存中的数据库缓冲池之后才可以访问,大大减少了I/O时间,提高了查询效率。

  • 缓冲池是什么?

    InnoDB存储引擎中一部分数据会放到内存中,缓冲池则占了这部分内存的大部分。

    在这里插入图片描述

​ 图:InnoDB 缓冲池包括了数据页、索引页、插入缓冲、锁信息、自适应 Hash 和数据字典信息等。

  • 缓存原则?

    “位置 * 频次”。数据存放在内存中,使用频次高的数据优先加载到缓存池中。

  • 缓存池如何读取数据?

在这里插入图片描述

  • 执行SQL修改了缓冲池中的数据,数据会马上同步到磁盘上吗?

    当对数据库中的记录进行修改时,会先修改缓冲池中的页里的记录信息,然后会以一定的频率刷新到磁盘上,并不是立刻回写。缓冲池会采用checkpoint机制将数据回写到磁盘上。

    比如,当缓冲池不够用时,可以强行采用checkpoint的方式,将不常用的脏页回写到磁盘上,然后再从缓冲池中将这些页释放掉。脏页:缓冲池中被修改过的页,与磁盘的数据页不一致。

  • 查看/设置缓冲池大小

    show variables like 'innodb_buffer_pool_size';
    
    set global innodb_buffer_pool_size = 268435456;
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

各个集合比较

1、 Queue与Deque的区别 引言: 在研究java集合源码的时候,发现了一个很少用但是很有趣的点:Queue以及Deque; 平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用,但是一直都不知道Queue的作用&#x…

微信小程序入门

目录 一,简介 二,小程序开发环境搭建 1.申请账号 2.安装开发工具 3.小程序工具使用 三,目录结构以及json配置 1.目录结果 2.json配置 3.JSON 语法 4.WXML 5.wxss 6.JS 逻辑交互 四,小程序宿主环境 1.程序与页面 2.组件…

DFMEA之严重度/频度/探测度/风险优先系数

文章目录介绍严重度频度探测度风险优先系数介绍 在实施DFMEA阶段中,要求、潜在失效模式、潜在失效后果、潜在失效原因和现有设计控制措施等 5 个为基础项, 它们的分析是决定 DFMEA实施成功与否的关键;严重度(S),频度&a…

4.2、网络层提供的两种服务

1、面向连接的虚电路服务 虚电路服务的核心思想:可靠通信由网络自身来保证\color{red}可靠通信由网络自身来保证可靠通信由网络自身来保证 当两台计算机进行通信时,必须建立网络层的连接\color{red}网络层的连接网络层的连接----虚电路VC\color{red}虚…

centos7搭建DNS服务(use)

参考:centos7搭建DNS服务完整版 CentOS 7 配置DNS服务 Centos7 DNS 服务器配置步骤 --use DNS服务类型 主机记录记录类型记录值ns1A192.168.1.1ns2A192.168.1.2wwwA192.168.1.100bbsCNAMEwwwftpA192.168.1.110mailMX 10192.168.1.120 一、服务配置 1.1 关闭SELi…

模型实战一之YOLOv7实例分割、模型训练自己数据集

模型实战一之YOLOv7实例分割、模型训练自己数据集 1.环境准备 下载yolov7实例分割模型: git clone https://github.com/WongKinYiu/yolov7.git -b mask yolov7-maskcd yolov7-mask安装环境 #查看已安装环境 conda info --envs #查看安装了哪些包 conda list#创建…

IMX6ULL学习笔记(15)——GPIO输出接口使用【官方SDK方式】

一、GPIO简介 i.MX6ULL 芯片的 GPIO 被分成 5 组,并且每组 GPIO 的数量不尽相同,例如 GPIO1 拥有 32 个引脚, GPIO2 拥有 22 个引脚, 其他 GPIO 分组的数量以及每个 GPIO 的功能请参考 《i.MX 6UltraLite Applications Processor Reference M…

市级数字政府电子政务大数据中心项目建设和运营方案

【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,不得作商业用途。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除! 完整资料领取见文末,部分资料内容: 1.1 大…

【QTimeEdit | QDateEdit | QDateTimeEdit | QCalendarWidget | QLCDNumber】

【QTimeEdit | QDateEdit | QDateTimeEdit | QCalendarWidget | QLCDNumber】【1】UI界面设计【2】相关头文件【3】构造函数初始化【4】setDate | setTime | setDateTime | currentDate | currentTime | currentDateTime【5】maximumDate | maximumTime | minimumDate | minimu…

基于Java+SpringBoot+vue等疫情期间网课管理系统详细设计和实现

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取联系🍅精彩专栏推荐订阅收藏👇&…

使用Prometheus和Grafana监控Apache Doris

目录1. 介绍2. Prometheus和Grafana的简单使用3. 配置Prometheus的prometheus.yml4. 下载Doris Dashboard模板1. 介绍 Doris的FE和BE通过http端口metrics路径,将监控数据暴露出来,以key-value的文本形式对外展现,每个key还可能有不同的Label…

Nacos注册中心

【Spring Cloud Alibaba】 1. Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud …

微信小程序开发—入门到跑路(五)

文章目录1. 今日目标2. 使用 npm2.1 小程序对 npm 的支持和限制问题2.2 了解什么是 vant Weapp2.3 安装 Vant 组件库问题2.4 使用 Vant 组件问题2.5 定义和使用 CSS 变量问题2.6 使用 CSS 变量定制 Vant 的主题样式问题2.7 什么是小程序 API 的 Promise 化2.8 安装并构建 minip…

运输层协议概述(计算机网络-运输层)

目录 运输层协议的位置 运输层为相互通信的应用进程提供了逻辑通信 应用进程之间的通信 客户-服务器通信模式 互联网的运输层协议 UDP 与 TCP 运输层的复用与分用 运输层端口的概念 端口在进程之间的通信中所起的作用 端口号 运输层协议的位置 从通信和信息处理的角度…

2022年终总结(脚踏实地,仰望星空)

2022年终总结 回忆录 2022年焦虑和快乐是这一年中最大的两种情绪了。焦虑主要是因为心里的三块石头,从年初就开始悬着。第一块石头,科研论文录用,第二个石头,拿到国奖,第三个石头是拿到满意的offer。目前只剩下最后一…

网络实验之EtherChannel技术实践

一、EtherChannel简介 EtherChannel简单来说就是将多个物理端口绑定为一个逻辑端口,通过多个端口绑定,能充分利用现有端口来增加带宽。构成etherchannel的端口必须配置成相同的特性,如双工模式、速度、同为FE或GE端口、native VLAN,、VLAN ra…

C++11标准模板(STL)- 算法(std::inner_product)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 计算两个范围的元素的内积…

十七、Docker Compose容器编排第二篇

在上一篇中我们讲解了容器编排是什么、能干什么、怎么安装、使用步骤&#xff0c;如果没有看的大家可以先看下&#xff1a;https://blog.csdn.net/u011837804/article/details/128335166&#xff0c;然后继续看这一篇&#xff0c;好了&#xff0c;我们继续。 1、Docker Compons…

gl-Camera

我的服务原文访问&#xff1a;Camera 1.创建摄像机的坐标系&#xff0c;&#xff08;创建原理&#xff0c;两条直线求其法向量&#xff09; Z轴:在世界坐标中指向摄像机的向量&#xff08;D&#xff09; X轴&#xff1a;随便找一个向上量和Z向量求出的法向量就是X轴&#xf…

PostgreSQL数据库TableAM——Table scan callbacks

TableAM Table scan TableAM提供了如下4个接口用于实现表数据的扫描功能。scan_begin函数的形参nkeys不为零&#xff0c;则扫描结果需要根据scan keys先进行过滤&#xff1b;pscan如果不为null&#xff0c;说明该结构体已经由parallelscan_initialize初始化过了(仅仅在table_b…