MySQL 基础知识(十)之 MySQL 架构

目录

1 MySQL 架构说明

2 连接层

3 核心业务层

3.1 查询缓存

3.2 解析器

3.3 优化器

3.4 执行器

4 存储引擎层

5 参考文档


1 MySQL 架构说明

下图是 MySQL 5.7 及其之前版本的逻辑架构示意图

MySQL 架构大致可分为以下三层:

  • 连接层:负责跟客户端建立连接、获取权限、维持和管理连接
  • 核心业务层:包括查询缓存、解析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等
  • 存储引擎层:负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎

2 连接层

MySQL 连接层是 MySQL 数据库架构中的一个重要组成部分,它主要负责处理客户端与数据库服务器之间的连接和通信。

主要作用为:

  • 连接管理:连接层负责监听客户端的连接请求,当客户端请求连接时,连接层会创建一个新的连接或者复用已有的空闲连接,以供客户端使用。在客户端使用完连接后,连接层会关闭连接以释放资源。为了提高性能和响应速度,连接层通常会实现一个线程池,线程池可以减少创建和销毁线程的开销,因为线程可以被重复使用
  • 通信协议处理:连接层处理客户端与数据库服务器之间的通信协议。它负责解析和处理客户端发送的请求,并将请求转换为数据库服务器能够理解的格式。同时,它也将数据库服务器的响应转换为客户端能够理解的格式,并返回给客户端
  • 安全性管理:连接层负责处理数据库的安全性。它验证客户端的身份和权限,确保只有经过授权的客户端能够访问数据库。连接层还可以对客户端发送的数据进行加密和解密,以保护数据库中的敏感信息
  • 异常处理:连接层还负责处理数据库连接过程中的异常情况。它可以检测到连接超时、网络中断等异常情况,并采取相应的措施,如重新连接或返回错误信息给客户端

查看连接状态

通过 show processlist 或 show full processlist 命令可以查看连接状态

  • Id:线程 id
  • User:启动这个线程的用户
  • Host:发送请求的客户端的 IP 和端口号
  • db:当前命令在哪个库执行
  • Command:该线程正在执行的操作命令
    • Create DB:正在创建库操作
    • Drop DB:正在删除库操作
    • Execute:正在执行一个 Prepared Statement
    • Close Stmt:正在关闭一个 Prepared Statement
    • Query:正在执行一个语句
    • Sleep:正在等待客户端发送语句
    • Quit:正在退出
    • Shutdown:正在关闭服务器
  • Time:表示该线程处于当前状态的时间,单位是秒
  • State:线程状态
    • Updating:正在搜索匹配记录,进行修改
    • Sleeping:正在等待客户端发送新请求
    • Starting:正在执行请求处理
    • Checking table:正在检查数据表
    • Closing table : 正在将表中数据刷新到磁盘中
    • Locked:被其他查询锁住了记录
    • Sending Data:正在处理 Select 查询,同时将结果发送给客户端
  • Info:一般记录线程执行的语句,默认显示前100个字符。想查看完整的使用 show full processlist;
# 查看连接状态
show processlist;

3 核心业务层

3.1 查询缓存

        当 MySQL 接收到一个查询请求时,它首先会检查查询缓存中是否已经存在与该查询请求相同的查询结果。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。其中 key 是查询的语句,value 是查询的结果。如果存在,MySQL 会直接返回缓存中的结果,而不需要再执行查询语句。如果查询缓存中没有该查询结果,MySQL 会执行查询语句并将结果存储在查询缓存中,以便下次相同的查询可以直接从缓存中获取结果。我们一般不使用查询缓存,因为一旦查询涉及的表发生改变,该缓存会失效,会被查询缓存清除。从 MySQL 8.0 版本开始,MySQL 不再支持查询缓存。

3.2 解析器

        MySQL 首先会进行词法分析 (Lexical scanner),将 SQL 语句分成一个个的词法单元 (Token) 。其中 Token 中包含 Keyword(也称 symbol)和非 Keyword。之后根据语法分析 (Grammar rule module) 生成一棵对应的“解析树”。最后进行语义分析,检查“解析树”中的元素是否在数据库中有对应的实体,并验证操作的合法性。例如会检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义,最后生成新的“解析树”。

3.3 优化器

        优化器会根据“解析树”生成最优的执行计划。这些执行计划可以分为两类:静态优化(编译时优化)、动态优化(运行时优化)。

        MySQL 能够处理的优化类型:

  • 重新定义关联表的顺序
  • 将外连接转化为内连接
  • 使用等价变换规则简化并规范 SQL 语句,如(5 = 5 AND  a > 5) 会被改写成 a > 5
  • 预估并转化为常数表达式,当 MySQL 检测到一个表达式可以转化为常数时,会一直把该表达式作为常数进行优化处理,如在索引列执行 COUNT()、MIN() 和 MAX()
  • 子查询优化,减少数据访问次数
  • 提前终止查询,当已经满足查询需求时,MySQL 能够立刻终止查询,如使用 LIMIT 子句或条件不成立时,立刻终止后续查询
  • 等值传播,如果两个列的值通过等式关联,MySQL 能够把其中一个列的 WHERE 条件传递到另一个列上
select g1.id,g1.name
from goods g1
inner join goods g2 using(id)
where g1.id > 5;# where g1.id > 5 等价于 where g1.id > 5 and g2.id > 5
select g1.id,g1.name
from goods g1
inner join goods g2 using(id)
where g1.id > 5 and g2.id > 5;

   

  • 列表 IN() 的比较,如 IN(2,1,3),MySQL 会 IN() 列表中的数据进行排序,排序后为 IN(1,2,3),然后可以通过二分查找的方式确定列表中的值是否满足条件
3.4 执行器

        MySQL 执行器是 MySQL 服务器中的一个组件,它负责执行优化器生成的执行计划,并返回查询结果。

        MySQL 执行器的主要职责包括:

  • 执行查询计划:根据优化器生成的执行计划,执行器会执行相应的操作,如读取数据、连接表、执行排序、聚合等
  • 处理数据:执行器会从存储引擎中读取数据,并对数据进行处理,如过滤、排序、分组等
  • 返回结果:执行器会将处理后的数据返回给客户端,通常以行的形式返回
  • 管理事务:执行器会负责管理事务的提交和回滚,确保数据的一致性和完整性
  • 处理错误:如果在执行过程中发生错误,执行器会捕获错误并将其返回给客户端

执行一条 SQL 语句的过程

4 存储引擎层

        MySQL 存储引擎是 MySQL 数据库的核心组件之一,它负责管理数据的存储和访问。MySQL 支持多种存储引擎,每个存储引擎都有自己的特点和适用场景。常见的存储引擎包括:

  • InnoDB:InnoDB 是 MySQL 的默认存储引擎,它支持事务、热备份(可以在不停机的情况下进行数据备份)、行级锁、外键约束等特性,适用于大多数应用场景
  • MyISAM:MyISAM 是 MySQL 的早期存储引擎,它支持快速的读取和插入操作,但不支持事务和外键约束
  • Memory:Memory 存储引擎将数据存储在内存中,适用于需要快速访问数据的场景,但数据在服务器重启后会丢失
  • CSV:CSV 存储引擎将数据存储为 CSV 文件,适用于需要导入和导出数据的场景
  • Archive:Archive 存储引擎用于存储归档数据,支持快速的插入和压缩操作,但不支持索引和查询

存储引擎层的主要职责包括:

  • 管理数据存储:存储引擎负责将数据存储在磁盘上,并提供高效的数据访问方式
  • 支持索引:存储引擎负责管理索引的创建、维护和查询
  • 处理事务:存储引擎支持事务的原子性、一致性、隔离性和持久性
  • 提供数据恢复:存储引擎负责在服务器崩溃或意外关闭后,恢复数据的完整性
  • 优化查询性能:存储引擎会根据查询条件和索引,选择最优的查询计划来提高查询性能

5 参考文档

《高性能MySQL》

深入浅出MySQL - 架构与执行 (https://www.cnblogs.com/novwind/p/17489997.html)

MySQL架构原理(详解) (https://cloud.tencent.com/developer/article/1981543)

MySQL架构详解 (https://mdnice.com/writing/43f52aeaee9644b1bc1373ff85f89972)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今日必读的9篇大模型论文

1.来自普林斯顿大学的研究团队及其合作者提出了 TutorEval 和 TutorChat。TutorEval 是首个结合了长上下文、自由形式生成和跨学科科学知识的基准,它有助于衡量 LMs 作为科学助手在现实生活中的可用性。TutorChat 是一个包含 80000 篇关于教科书的长篇合成对话的数据…

Mybatis | 初识Mybatis

初识Mybatis 目录: 初识Mybatis什么是Mybatis?Hibernate 和 MyBatis的区别?Mybatis的下载和使用Mybatis的工作原理 作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习&#…

第3.1章:StarRocks数据导入——Insert into 同步模式

一、概述 在StarRocks中,insert的语法和mysql等数据库的语法类似,并且每次insert into操作都是一次完整的导入事务。 主要的 insertInto 命令包含以下两种: insert into tbl select ...insert into tbl (col1, col2, ...) values (1, 2, ...…

2024-02-21(Spark)

1.Spark程序中的相关端口 4040:是一个运行的Application在运行的过程中临时绑定的端口,用以查看当前任务的状态。4040被占用会顺延到4041,4042等。4040是一个临时端口,当前程序运行完成后,4040就会被注销。 4040和Dr…

防火墙——计算机网络

前述基于密码的安全机制不能有效解决以下安全问题: 用户入侵: 利用系统漏洞进行未授权登录; 授权用户非法获取更高级别权限等。 软件入侵: 通过网络传播病毒、蠕虫和特洛伊木马。 拒绝服务攻击等。 解决方法: 防火墙&a…

基于多种机器学习模型的西北地区蒸散发模拟与趋势分析_季鹏_2023

基于多种机器学习模型的西北地区蒸散发模拟与趋势分析_季鹏_2023 摘要关键词 1 资料和方法1. 1 研究区域与观测数据1. 2 机器学习模型构建与验证方法1. 3 SHAP 可解释性方法 2 主要结果2. 1 不同模型的模拟性能和泛化能力2. 2 不同模型的可解释性分析2. 3 5 km 分辨率格点蒸散发…

Linux内核解读

来自鹅厂架构师 作者:aurelianliu 工作过程中遇到的调度、内存、文件、网络等可以参考。 1.os运行态 X86架构,用户态运行在ring3,内核态运行在ring0,两个特权等级。 (1)内核、一些特权指令,例…

强化学习(GPS)

GPS——Guided Policy Search引导策略搜索 GPS目前被作为基础算法广泛应用于各种强化学习任务中,其出发点在于纯粹的策略梯度方法在更新参数时不会用到环境模型因而属于一种无模型强化学习算法。由于没有利用任何环境的内在属性,使得其训练只能完全依靠…

【开源】在线办公系统 JAVA+Vue.js+SpringBoot+MySQL

目录 1 功能模块1.1 员工管理模块1.2 邮件管理模块1.3 人事档案模块1.4 公告管理模块 2 系统展示3 核心代码3.1 查询用户3.2 导入用户3.3 新增公告 4 免责声明 本文项目编号: T 001 。 \color{red}{本文项目编号:T001。} 本文项目编号:T001。…

Docker Compose映射卷的作用是什么,dockerfile这个文件有什么区别和联系?

Docker Compose中映射卷(Volumes)的作用和Dockerfile之间既有区别也有联系。下面详细解释两者的作用、区别和联系: Docker Compose映射卷的作用 在Docker Compose中,卷(Volumes)用于数据持久化和数据共享…

沁恒CH32V30X学习笔记11---使用外部时钟模式2采集脉冲计数

使用外部时钟模式2采集脉冲计数 使用外部触发模式 2 能在外部时钟引脚输入的每一个上升沿或下降沿计数。将 ECE 位置位时,将使用外部时钟源模式 2。使用外部时钟源模式 2 时,ETRF 被选定为 CK_PSC。ETR 引脚经过可选的反相器(ETP),分频器(ETPS)后成为 ETRP,再经过滤波…

Excel练习:日历

Excel练习:日历 ‍ 题目:制作日历 ‍ ​​ 用rows和columns函数计算日期单元格偏移量 一个公式填充所有日期单元格 ​​ ‍

PyTorch使用Tricks:学习率衰减 !!

文章目录 前言 1、指数衰减 2、固定步长衰减 3、多步长衰减 4、余弦退火衰减 5、自适应学习率衰减 6、自定义函数实现学习率调整:不同层不同的学习率 前言 在训练神经网络时,如果学习率过大,优化算法可能会在最优解附近震荡而无法收敛&#x…

LDRA Testbed软件静态分析_软件质量度量

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…

Qt C++春晚刘谦魔术约瑟夫环问题的模拟程序

什么是约瑟夫环问题? 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N6,M5,被杀掉的顺序是:5&#xff…

离线升级esp32开发板升级包esp32-2.0.14(最新版已经3.0alpha了)

1.Arduino IDE 2.3.2最新 2024.2.20升级安装:https://www.arduino.cc/en/software 2.开发板地址 地址(esp8266,esp32) http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://raw.githubusercontent.com/espressif/arduino-esp32…

09MARL深度强化学习policy gradient

文章目录 前言1、Multi-Agent Policy Gradient Theorem2、Centralised State-Value Critics2、Centralised Action-Value Critics 前言 Independent learning算法当中每个智能体看待其他智能体为环境的一部分,加剧了环境非平稳性,而CTDE框架的算法能够降…

HTTP的详细介绍

目录 一、HTTP 相关概念 二、HTTP请求访问的完整过程 1、 建立连接 2、 接收请求 3、 处理请求 3.1 常见的HTTP方法 3.2 GET和POST比较 4、访问资源 5、构建响应报文 6、发送响应报文 7、记录日志 三、HTTP安装组成 1、常见http 服务器程序 2、apache介绍和特点 …

工具分享:在线键盘测试工具

在数字化时代,键盘作为我们与计算机交互的重要媒介之一,其性能和稳定性直接影响到我们的工作效率和使用体验。为了确保键盘的每个按键都能正常工作,并帮助用户检测潜在的延迟、连点等问题,一款优质的在线键盘测试工具显得尤为重要…

QT设置窗口随窗体变化(窗口文本框随窗体的伸缩)

目录 1.建立新窗口2.最终效果 1.建立新窗口 1)在窗体中创建一个 textBrowser,记录坐标及宽高 X-100 Y-130 宽-571 高-281,窗体宽高800*600; 2)在.h头文件中插入void resizeEvent(QResizeEvent *event) override;函数 …