第18章:逻辑架构

news2024/11/28 22:42:24

一、逻辑架构剖析

1.1服务器处理客户端请求

①MySQL是典形的C/S架构,服务器端使用mysqld

②客户端进程向服务器进程发送SQL语句,服务器进程在向客户端进程发送处理结果。

查询请求演示图

查询请求详细图

 1.2第1层:连接层

①客户端访问MySQL服务器前,第一件事是建立TCP连接。

②经过三次握手建立连接成功后,MySQL服务器对TCP传输的账号和密码做认证。如果错误,客户端结束执行。如果正确,从权限表查出此账号的权限。

③TCP连接收到请求会在线程池分配一个线程专门与这个客户端交互。每一个连接从线程池获取线程,省去了创建和销毁线程的开销。

1.3第2层:服务层

①SQL接口

接收用户的SQL命令,并且返回用户的查询结果。select *** from

②解析器

在解析器中对SQL语句进行语法分析,语义分析。将SQL语句分解成数据结构,语法树。根据数据字典丰富查询语法树,验证客户端是否具有该查询的权限。

③查询优化器

SQL语句使用优化器确定SQL语句的执行路径,生成执行计划。

执行计划表明使用哪些索引查询,表之间的连接顺序,存储引擎,并将结果返回给用户。

使用“选取-投影-连接”,先根据where语句进行选取,再通过select查询条件进行投影,最后将两个查询条件连接起来生成最终的结果。

④查询缓存(8.0删除)

缓存一条select语句的执行结果,查询缓存可以在不同客户端共享。

1.4第3层:引擎层

负责MySQL数据的存储和提取,对物理服务器级别维护的底层数据执行操作。

1.5小结

①连接层:客户端和服务器端建立连接,客户端发送SQL到服务器端

②服务层:对SQL语句进行查询,与数据库文件的存储方式无关

③引擎层:与数据库文件打交道,负责数据的存储和读取

二、SQL执行流程

2.1MySQL中的SQL执行流程

 

MySQL的查询流程:

1.查询缓存:server在查询缓存发现这条SQL语句,就会直接将结果返回给客户端。没有就接入解析器阶段。效率不高,在MySQL8.0删除了。

2.解析器:在解析器对SQL语句进行语法分析,语义分析。

分析器先做“词法分析”,把SQL语句的字符串识别出关键字,表名。

然后做“语法分析”看SQL语句是否满足语法,语句正确生成一个语法树。

3.优化器:在优化器中确定SQL语句的执行路径,比如是全表检索还是索引检索。一条查询有多种执行方式,找出执行时间最短的计划。

物理查询优化:通过索引和表连接方式来进行优化

逻辑查询优化:换一种更优的SQL查询写法

4.执行器:

判断此查询是否有权限。

执行SQL查询返回结果。如果设置了缓存,将查询结果进行缓存。

【总结】

SQL语句—查询缓存—解析器—优化器—执行器。

 三、数据库缓冲池buffer pool

3.1 缓冲池VS查询缓存

1.缓冲池

①概念

InnoDB存储引擎是以页来管理存储空间的,在内存中进行操作效率会高很多。DBMS会申请占用内存作为数据缓冲池。

减少与磁盘直接进行的I/O的时间。

②缓存原则

优先把使用频次高的如数据进行加载到内存

③缓冲池的预读特性

当我们使用一些数据,大概率会使用周围的一些数据,采用“预读”的机制提前加载,减少未来的磁盘I/O操作。

2.查询缓存

提前把查询结果存起来,K-V。K是select语句,V是查询结果。

3.2 缓冲池如何读取数据

在数据库进行页面读操作的时候,先判断该页是否在缓冲池中,存在就直接读取。不存在就从磁盘或内存加载到缓冲池中。

【问题】执行SQL语句更新了缓冲池的数据,会立刻同步到磁盘吗?

数据库会一定频率刷新到磁盘,并不是每次更新完就立即回写。当缓冲池不够用时,会把脏页(修改过的页,不经常查询)回写到磁盘,释放掉脏页。

3.3 查看/设置缓冲池的大小

1.查看缓冲池大小128MB

show variables like 'innodb_buffer_pool_size';

2.修改缓冲池大小

set global innodb_buffer_pool_size = 268435456;

3.4更新数据流程

当更新某个数据的时候,先把数据从内存或磁盘加载到Buffer Pool,然后修改内存的数据,最后定期刷入磁盘。

如果在刷入磁盘的时候宕机,数据会回滚Redo Log&Undo Log

 

 

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

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

相关文章

如何使用 NGINX Service Mesh 进行速率限制

原文作者:NGINX 原文链接:如何使用 NGINX Service Mesh 进行速率限制 转载来源:NGINX 官方网站 ​ NGINX 唯一中文官方社区 ,尽在 nginx.org.cn 无论 HTTP 请求是恶意的(暴力破解密码或 DDoS 攻击)还是正常…

day07--java高级编程:JDK8的新特性,JDK9的新特性,JDK10的新特性,JDK11的新特性,JDK15的新特性

1 JDK8的其它新特性 说明:一些8中的新特性在,java高级部分学习的同时顺便讲过了。 1.1 JDK8新特性的总体结构 1.2 Java 8新特性简介 1.3 Lambda表达式 1.3.1 出现背景 1.3.2 Lambda表达式的使用举例 package com.atguigu.java1;import org.junit.Tes…

2023年软件测试简历没有邀约?为什么?8类细节通通告诉你(附赠高薪简历)

求职不顺,没有邀约,大概率是你的简历出现了问题。 本篇文章列出高薪简历应该注意的细节,合计36处,涉及简历的八大组成部分。 现在就讲: 一、简历样式要求(3点要求) 1、简历格式,…

某游戏登录密码加密,webpack

注意:文章内容仅用于学习和技术交流,切勿做出违法的事情,如有侵权请联系我删除。 网址(今天的大冤种):aHR0cHM6Ly93d3cuZ205OS5jb20v 一,分析 从上面图片可以看到,他的密码是加密了…

FinGPT:以数据为中心的方法革新开源金融

FinGPT 由 AI4Finance Foundation 开发,是一种以数据为中心的工具,可使大型语言模型 (LLM) 的金融数据民主化。它旨在成为开放式金融的开源解决方案,旨在彻底改变金融业。本文将深入探讨 FinGPT 的复杂性、它的好处,以及它如何成为…

vscode使用latex环境无法编译,是否与anaconda环境冲突

Vscode使用latex环境无法编译,是否与anaconda环境冲突 在 VSCode 中使用 LaTeX 环境无法编译,可能与 Anaconda 环境冲突。这是因为 Anaconda 默认会将环境变量PATH 设置为 Anaconda 所在的路径,如果你使用的是 Anaconda 内置的 Python环境&am…

如何三分钟快速制作自定义ppt

目录 利用ChatGPTMindShow三分钟生成PPT 机器人 道合顺 莓用ai 百晓生 aichat 结合提词器以达到更好地提问效果: 更好地提问ChatGPT_常用prompt表_小黄同学LL的博客-CSDN博客 举个栗子: 利用ChatGPTMindShow三分钟生成PPT 提词:…

LeCun世界模型出场!Meta震撼发布首个「类人」模型,理解世界后补全半张图,自监督学习众望所归

LeCun世界模型出场!Meta震撼发布首个「类人」模型,理解世界后补全半张图,自监督学习众望所归 原创 新智元 新智元 2023-06-14 12:19 发表于北京 【新智元导读】LeCun的世界模型终于来了,可谓是众望所归。既然大模型已经学会了理解…

Unity入门6——光源组件

一、参数面板 二、参数介绍 Type:光源类型 Spot:聚光灯 Range:发光距离Spot Angle:光锥角度Directional:方向光Point:点光源Area(Baked Only):面光源 仅烘焙。预先算好&…

如何选择好用的效果图渲染平台

在现代的建筑设计、室内设计、电影动画等行业中,效果图已经成为了一个重要的工具,能够帮助设计师和制作人员更好地呈现他们的想法和概念。而要制作出高质量的效果图,一个好用的效果图渲染平台是非常必要的。 如何选择好用的效果图渲染平台呢…

【Flutter】Flutter 如何获取安装来源信息

文章目录 一、 前言二、 安装来源信息的基本概念1. 什么是安装来源信息2. 为什么我们需要获取安装来源信息 三、 如何在 Flutter 中获取安装来源信息1. 准备工作2. 安装必要的依赖库3. 编写代码获取安装来源信息 四、 完整示例代码五、总结 一、 前言 在这篇文章中&#xff0c…

图像处理实战01-OpenCV 入门指南

Python OpenCV 入门指南 OpenCV是一个强大的计算机视觉库,它可以用于处理图像和视频数据,以及进行目标检测和跟踪等任务。,将学会如何使用Python编写OpenCV代码来进行基础和进阶的图像处理和分析。 学习OpenCV可以帮助你掌握基本的图像处理…

(哈希表) 1002. 查找共用字符 ——【Leetcode每日一题】

❓1002. 查找共用字符 难度:简单 给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。 示例 1: 输入&…

Apache Hive安装部署

Apache Hive安装部署 🚃Hive元数据 描述数据的数据,主要描述数据属性信息,用来支持如指示存储位置,历史数据,资源查找,文件记录等功能。存储在关系型数据库中。如hive内置Derby,或第三方MySql…

微服务: 00-rabbitmq出现的异常以及解决方案

目录 前言: 问题概述: 1. rabbitmq初始安装配置异常 -> 1.1 rabbitmq报您与此网站连接不是私密连接 --->1.1.1 上述问题解决方案 ---> 1.1.2 依次执行下面代码 -> 1.2 解决用户的No access情况 -> 1.2.1 使用设置的账号密码进行登录 -> 1.2.2 点击 Ad…

参加完京东的面试,感觉面试官有点菜...

前言 去年年底面试了京东,现整理面经,希望各位不要觉得太迟(这该死的拖延症???)。 没有截图是因为他根本没给我发邮件,直接boss开聊的,但是boss的聊天记录只有30天,此处点名批评下&#xf…

VMware Tools 12.2.5 发布下载 - 虚拟机必备工具

VMware Tools 12.2.5 发布下载 - 虚拟机必备工具 请访问原文链接:https://sysin.org/blog/vmware-tools-12/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 简介 VMware Tools 中包含一系列服务和组件&#xff0c…

ThreadLocal了解

文章目录 概述源码原理内存泄露应用场景 概述 ThreadLocal提供线程的局部变量,这种变量与普通变量的区别在于,每个访问这种变量的线程都有自己的、独立的变量副本。用于解决多线程间的数据隔离问题。 源码 //返回Thread实例的成员变量threadLocals Th…

Pytest教程__测试用例的执行方式(2)

在pytest框架中,编写测试用例有如下约束: 所有的测试用例文件名都需要满足test_*.py格式或*_test.py格式。在测试用例文件中,测试类以Test开头,并且不能带有__init__方法,否则pytest不会执行该class。在测用例的class…

企业如何选择最佳的CDN服务?

根据研究表明,47%的客户更喜欢能在2秒内加载完成的网页,不仅如此,如果一个网站的加载时间超过3秒,那么40%的访问者会毫不犹豫的离开你的网站。所以使用正确的内容交付网络对初创公司尤为关键。它有助于实现快速、安全的内容交付。…