Mysql系列—3.体系架构

news2024/9/26 22:50:32

目录

Mysql体系结构

Connectors:

连接池和线程管理:

SQL Interface:

Parser(查询解析器):

Optimizer(优化器):

Caches(缓存):

可插拔的存储引擎:

一条SQL的执行

连接器

分析器

优化器

执行器


Mysql体系结构

Connectors:

MySQL Connector是MySQL提供的⼀组官⽅的数据库连接器,⽤于在不同编程语⾔中连接和 操作MySQL数据库。这些连接器充当数据库驱动程序,提供了与MySQL服务器进⾏通信的接⼝。

连接池和线程管理:

连接池是⼀个保存和复⽤数据库连接的缓冲区。它允许在需要时从池中获取连接,⽽不 是每次请求时都重新创建连接。线程管理是MySQL⽤于处理客户端请求的组件。对于每个客户端连接, MySQL会为其分配⼀个线程来处理查询和其他数据库操作。这⾥会验证⽤户的账号密码。

SQL Interface:

接受客户端发起的 SQL 语句。

Parser(查询解析器):

解析器是MySQL数据库管理系统中的⼀个重要组件,其主要作⽤是解析SQL语句。 解析器负责将⽤户提交的SQL语句转换为MySQL数据库可以理解和执⾏的内部数据结构,以便数据库引擎能 够执⾏相应的操作。

MySQL 解析器作⽤包括:

1. 语法分析:解析器对SQL语句进⾏语法分析,确保其符合MySQL⽀持的SQL语法规范。如果SQL语句有 语法错误,解析器将报告错误信息。

2. 构建查询树:解析器将合法的SQL语句转换为⼀棵查询树(Query Tree)或查询语法树(Syntax Tree)。这颗树结构表示SQL语句的层次结构和语法关系,有助于数据库引擎进⾏后续的优化和执⾏。

3. 表达式分析:解析器负责识别SQL语句中的表达式,包括数学运算、逻辑运算、函数调⽤等。它将表达 式解析为内部表示,以便数据库引擎能够正确执⾏这些表达式。

4. 权限检查:解析器可能涉及到对⽤户权限的检查,确保⽤户有权执⾏提交的SQL语句。这包括对表、列 的访问权限等。

Optimizer(优化器):

MySQL优化器是MySQL中的⼀个关键组件,其主要作⽤是分析和优化SQL查询语 句,以提⾼查询性能。优化器的主要作⽤包括:查询重写、索引选择、连接顺序优化、⼦查询优化等。

Caches(缓存):

MySQL中有多种类型的缓存,⽤于提⾼查询性能和减轻数据库负担。以下是MySQL中常⻅的⼏种缓存:

1. 查询缓存(Query Cache):  查询缓存存储已经执⾏过的查询的结果集,当相同的查询再次被执⾏时,可以直接返回缓 存中的结果,⽽不必再次执⾏查询。 注意: 在MySQL 8.0版本中,查询缓存被移除,因为它在⾼并发和写⼊负载下可能导致性能问 题

2. InnoDB缓冲池(InnoDB Buffer Pool):InnoDB存储引擎使⽤缓冲池来缓存表数据和索引。这是⼀个内存区域,⽤于存储热点数据,减 少对磁盘的读取次数。

可以通过配置参数 innodb_buffer_pool_size 来调整InnoDB缓冲池的⼤⼩。

可插拔的存储引擎:

以下是 MySQL 中⼀些常⻅的可插拔存储引擎:

1. InnoDB:

特点: 默认的存储引擎,⽀持事务、⾏级锁定、外键等特性,适⽤于事务性应⽤。

适⽤场景: 适⽤于⼤多数 OLTP(联机事务处理)应⽤,要求事务⽀持和数据⼀致性。

2. MyISAM:

特点: 不⽀持事务,表级锁定,适⽤于读密集型操作。

适⽤场景: 适⽤于读操作频繁、写操作相对较少的场景,⽐如数据仓库、⽇志分析等。

3. Memory(或 Heap):

特点: 将表数据存储在内存中,适⽤于需要⾮常快速访问的临时表。

适⽤场景: 适⽤于需要频繁读写的临时数据,但不适合⽤于持久性数据。

 除此还支持CSV、Archive、Blackhole、TokuDB等引擎。

⽂件系统:

⽂件系统是计算机系统⽤于组织和存储⽂件的⼀种机制,它提供了⽂件的层次结构、存储管理、 ⽂件访问权限和元数据等功能。⽂件系统通常在存储介质(如硬盘、固态硬盘、光盘等)上创建⼀个逻辑 层,⽤户和应⽤程序可以通过⽂件系统来对⽂件进⾏访问和管理。常⻅的⽂件系统包括:EXT3、EXT4、 XFS。

⽇志:

错误⽇志、慢查询⽇志、General log、Binary Log、Relay log、Redo log 等

一条SQL的执行

连接器

连接器负责跟客户端建⽴连接、获取权限、维持和管理连接。

# mysql -h127.0.0.1 -uroot -p

如果⽤户名密码不对,会收到⼀个"Access denied for user"的错误。

如果⽤户名密码正确,连接器会从权限表⾥⾯查出⽤户拥有的权限。这就意味着,如果修改了权限,只对新创建的 连接⽣效。

因为建⽴连接的成本⽐较⾼,所以推荐使⽤⻓连接。

mysql> show global status like 'threads%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 19 |
| Threads_connected | 1 |
| Threads_created | 22 |
| Threads_running | 2 |
+-------------------+-------+
4 rows in set (0.00 sec)

分析器

词法分析

将输⼊的SQL语句分解成⼀个个的词(token)。每个词代表语句中的⼀个基本单位,⽐如关键字、标识符、运算 符、常数等。词法分析器会⽣成⼀个词法单元序列。

语法分析

语法分析器会根据语法规则,判断 SQL 语句是否满⾜ MySQL 语法。如果不满⾜,则提示 “You have an error in your SQL syntax”。语法分析器会检查 语法是否符合SQL语⾔的规定,同时构建语法树。

优化器

优化器负责分析查询语句并选择执⾏计划,以最优的⽅式检索或操作数据。优化器的⽬标是选择执⾏计划,使得查 询的执⾏效率最⾼,从⽽提⾼系统性能。

以下是MySQL优化器的⼀些关键⽅⾯:

1. 查询解析:优化器⾸先对查询语句进⾏解析,识别语法和语义,⽣成⼀个内部表示形式,称为查询树 (Query Tree)或查询块(Query Block)。

2. 查询优化:⼀旦⽣成了查询树,优化器开始考虑不同的执⾏计划。它尝试选择最优的执⾏计划,以最⼩化查 询的执⾏成本。这涉及到考虑多个因素,如索引的使⽤、连接顺序、过滤条件的顺序等。

3. 成本估算:优化器使⽤成本模型来估算每个可能执⾏计划的成本。这通常涉及考虑磁盘I/O、CPU消耗等因 素,以便评估执⾏计划的相对效率。

4. 索引优化:优化器会尝试使⽤最适合的索引,以加速数据的检索。这可能涉及选择合适的单列索引或复合索 引,并且可能涉及使⽤覆盖索引等优化技术。

5. 统计信息:优化器使⽤数据库收集的统计信息,如表的⾏数、索引的基数等,来做出更准确的成本估算和执 ⾏计划选择。

6. 动态优化:MySQL的优化器是⼀个动态优化器,意味着它可以在运⾏时根据实际情况进⾏⼀些调整。例如, 可以根据表的⼤⼩和数据分布动态选择是否使⽤索引。

执行器

以下是MySQL执⾏器的主要作⽤和⼀些相关的概念:

1. 执⾏计划的执⾏:优化器⽣成执⾏计划后,执⾏器负责按照计划执⾏具体的数据库操作,例如表扫描、索引 扫描、连接操作等。

2. 结果集的处理:当查询语句是⼀个SELECT语句时,执⾏器将负责将查询结果集返回给⽤户。它会逐步地从存 储引擎获取数据,并在需要时将数据发送给客户端。

3. 锁管理:执⾏器在执⾏查询时,需要考虑并发访问的情况,因此它会管理和释放锁以确保数据的⼀致性和隔 离性。这包括共享锁、排他锁、⾏级锁等。

4. 事务管理:如果查询涉及事务,执⾏器负责事务的开始、提交或回滚。它确保事务的原⼦性、⼀致性、隔离 性和持久性(ACID属性)。

5. 异常处理:执⾏器负责处理可能的异常情况,如数据不存在、违反唯⼀性约束、死锁等。在出现异常时,执 ⾏器可能回滚事务或执⾏相应的错误处理逻辑。

6. 返回结果:当查询执⾏完成后,执⾏器将结果返回给客户端。结果可以是查询结果集、受影响的⾏数或其他 执⾏信息。

7. 资源管理:执⾏器需要管理系统资源,例如内存和CPU。这确保在执⾏查询时不会导致系统资源耗尽。

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

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

相关文章

Clickhouse集群化(四)使用clickhouse-operator部署clickhouse集群

clickhouse operator实际下就是帮助我们自动化的生产一些clickhouse配置文件信息,在目录/etc/clickhouse-server/的config.d conf.d users.d 1.1. 部署clickhouse operateor 下载clickhouse-operator.yaml文件 wget https://raw.githubusercontent.com/Altinity/…

Vue3 前端导出Excel表格 Xlsx格式

介绍 xlsx 是一个用于处理 Excel 文件的流行库。可以你读取、生成和操作 Excel 文件(.xlsx 格式),提供了强大的功能来处理工作表和单元格数据。可以轻松地将 JSON 数据转换为 Excel 表格,也可以从 Excel 文件中读取数据。 安装 …

【Linux篇】网络请求和下载与端口

目录 1. 网络请求和下载 1.1 ping命令 1.2 wget命令 1.3 curl命令 2. 端口 2.1 查看端口占用 使用nmap命令,安装nmap:yum -y install nmap 可以通过netstat命令,查看指定端口的占用情况。 3. 进程管理 3.1 进程 3.2 查看进程 3.3 …

Llama 4B剪枝蒸馏实战

大型语言模型 (LLM) 因其有效性和多功能性,如今已成为自然语言处理和理解领域的主导力量。LLM(例如 Llama 3.1 405B 和 NVIDIA Nemotron-4 340B)在许多具有挑战性的任务中表现出色,包括编码、推理和数学。然而,它们的部…

异步编程之std::future(二): std::future和std::promise原理

目录 1.引言 2.源码分析 2.1.std::promise的源码实现 2.2.std::future的源码实现 2.3.关联状态对象的代码实现 3.整个类图 4.future和promise之间的并发安全和线程同步 5.总结 1.引言 异步编程之std::future(一): 使用-CSDN博客 在std::future(一)中详…

【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range

【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range 环境 linux diffusers 0.30.0问题详情 报错详情 from diffusers import KolorsPipelineTraceback (most recent call last):File "Kolors/demo.py", line 6, in <module>pi…

Vue(2)——Vue指令

目录 v-html v-show和v-if v-else和v-else-if v-on v-bind v-for v-model v-html 设置元素的innerHTML <body><div id"app"><div v-html"msg"></div></div><script src"https://cdn.jsdelivr.net/npm/vue2.…

大模型从入门到精通——基于智谱AI和LangChain实现RAG应用(一)

基于智谱AI和LangChain实现RAG应用(一) 1. 使用 LangChain 调用智谱 GLM 1.1 自定义chatglm #!/usr/bin/env python # -*- encoding: utf-8 -*-from typing import Any, List, Mapping, Optional, Dict from langchain_core.callbacks.manager import CallbackManagerForLLM…

统一身份认证服务(CAS)系统实现SSO认识

一、前言 CAS&#xff08;Central Authentication Service&#xff09;即中央认证服务&#xff0c;是 Yale 大学发起的一个企业级开源项目&#xff0c;旨在为 Web 应用系统提供一种可靠的 SSO 解决方案&#xff0c;它是一个企业级的开源单点认证登录解决方案&#xff0c;采用ja…

netty编程之UDP

写在前面 源码 。 UDP&#xff0c;user datagram protocol,是internet协议簇中无连接的传输协议&#xff0c;因为无连接所以相比于TCP需要维护更少的信息以及网络交互&#xff0c;所以具有更高的效率。本文看下netty是如何实现的&#xff0c;和TCP方式差别不大&#xff0c;下面…

【宝马中国-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Java使用EasyExcel导出图片(原比例大小)到Excel中

EasyExcel导出图片 又开始写Excel导出的需求了&#xff0c;哈哈哈…… 目前的需求是将图表分析对的饼图和折线图&#xff0c;也就是一张完整的图片单独导出到Excel中 为了方便客户在业务报告时&#xff0c;可以使用数据分析图片&#xff0c;从而更清晰准确地展示数据趋势 因…

【C++学习笔记】数据类型与运算符(一)

目录 一、常量与变量 1.1 常量 字面常量 符号常量 1.2 变量 1.3 标识符命名规范 二、数据类型 2.1 整型 2.2 实型&#xff08;浮点型&#xff09; 2.3 字符型 2.4 字符串 2.5 布尔型 三、cin控制台输入 3.1 输入代码 3.2 解决输入中文乱码 四、运算符 4.1 算术…

OpenCV杂项图像变换(1)自适应阈值处理函数adaptiveThreshold()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 函数对数组应用自适应阈值。 该函数根据以下公式将灰度图像转换为二值图像&#xff1a; 对于 THRESH_BINARY: t e x t d s t ( x , y ) { maxV…

# NLP-transformer学习:(5)Bert 实战

NLP-transformer学习&#xff1a;&#xff08;5&#xff09;模型训练和预测 基于 NLP-transformer学习&#xff1a;&#xff08;2,3,4&#xff09;&#xff0c;这里对transformer 更近一步&#xff0c;学习尝试使用其中的bert 文章目录 NLP-transformer学习&#xff1a;&#x…

在 Debian 上安装 IntelliJ IDEA 笔记

在 Debian&#x1f4a9; 上安装 IntelliJ IDEA &#x1f4a1; 笔记 下载安装 JDK17安装 IntelliJ IDEA Community添加创建桌面启动项&#xff08;快捷方式&#xff09; 参考资料 下载 两个包已经下好了&#xff0c;一个JDK17&#xff0c;一个IntelliJ IDEA Community 使用 wge…

【Liunx入门】Liunx软件包管理器

文章目录 前言一、什么是软件包二、网络相关指令三、Ubuntu包管理软件apt1.查看软件包2.sudo权限3.软件安装4.卸载软件5.软件更新6.升级软件包 总结 前言 Linux软件包管理器是Linux系统中用于安装、升级和卸载软件包的工具。它们提供了一个方便的方式来管理软件包&#xff0c;…

c++习题25-大整数加法

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 描述 求两个不超过200位的非负整数的和。 输入 有两行&#xff0c;每行是一个不超过200位的非负整数&#xff0c;可能有多余的前导0。 输出 一行&#xff0c;即相加后的结果。结果里不…

Physics of Language Models学习小结

1.概述 Physics of Language Models 参考&#xff1a;https://zhuanlan.zhihu.com/p/711391378 这是一系列论文和一个新的LLM研究方向&#xff0c;官网的概述如下。 苹果掉落&#xff0c;盒子移动&#xff0c;但重力和惯性等普遍规律对技术进步至关重要。虽然GPT-5或LLaMA-…

Threejs学习-三维坐标系、相机控件

坐标系&#xff1a; Three.js 使用的是右手坐标系&#xff0c;x 轴朝右&#xff0c;y 轴朝上&#xff0c;z 轴朝向自己。 相机控件轨道控制器 相机控件OrbitControls 通过相机控件OrbitControls实现旋转缩放预览效果。 // 设置相机控件轨道控制器OrbitControls const contr…