当前位置: 首页 > java >正文

MySQL架构

MySQL架构

  • 一.MySQL架构
  • 二.连接层
    • 1.⽹络端口和连接管理线程
      • 1)⽹络端口
      • 2)连接管理线程
    • 2.客户端连接线程管理
    • 3.连接量管理
  • 三.服务层
    • 1.服务管理和公共组件
    • 2.NoSQL接⼝与SQL接⼝
    • 3.Parser(语法分析器)
    • 4.Optimizer(查询优化器)
    • 5.Caches & Buffers(缓存)
    • 6.SQL语句的执⾏流程

一.MySQL架构

MySQL8.0服务器是由连接池、服务管理工具和公共组件、NoSQL接口、SQL接口、解析器、优化
器、缓存、存储引擎、文件系统组成。MySQL还为各种编程语言提供了一套用于外部程序访问服务器
的连接器。整体架构图如下所示:在这里插入图片描述

  • MySQL Connectors:为使用MySQL服务的编程语言平台,提供了访问接口,可以根据自己实际
    使用的编程语言到官网下载地址下载。
  • MySQL Shell:是一个高级客户端和代码编辑器,以组件的形式提供,需要单独安装。除了提供的
    类似于 mysql 客户端的功能,还可以使用JavaScript 和 Python 调用MySQL 的API,一般为开发人员使用。
  • 连接层:对客户端连接进行权限校验并保存客户端的连接信息,通过池化技术实现线程重用,以及
    根据具体的配置限制连接数量。
  • 服务管理和公共组件:提供了数据备份与恢复,安全组件,主从复制和集群管理,表分区等实用功
    能。
  • 服务层:提供了NoSQL API,SQL API,SQL语句解析,SQL语句优化,SQL语句缓存等组件,并将优化后的SQL语句发送⾄存储引擎执行相应的操作并返回结果。
  • 存储引擎层:一系列可插拔的存储引擎,主要负责数据的写入和读取,与底层的数据和日志文件进
    行交互,可以根据具体的业务需求选择不同的存储引擎。
  • 文件系统层:包含了MySQL发行版的文件和程序,以及具体数据库文件和日志。

二.连接层

连接层的作用是处理客户端的连接,主要介绍MySQL Server如何管理连接,包括对可用连接接口的描述和服务器如何使用连接处理线程

1.⽹络端口和连接管理线程

1)⽹络端口

⼀台服务器能够侦听多个⽹络端口上的客⼾端连接,开放多个端口,只需在选项文件中指定多个端口
即可,配置如下所示:在这里插入图片描述

2)连接管理线程

通过连接管理器线程处理端口上的客户端连接请求:

  • 在所有平台上,用⼀个管理器线程处理所有的 TCP/IP 连接请求。
  • 在 Unix 上,管理器线程还可以处理其他Unix socket 连接请求。
  • 在 Windows 上,使⽤⼀个管理器线程处理通过Shared-memory方式连接请求,使用另一个管理
    器线程处理Named-pipe方式连接请求。
  • 在所有平台上,可以额外启⽤⼀个端口用于接受针对管理的 TCP/IP 连接请求,管理端口的连接可
    以使 用处理"普通" TCP/IP 请求的管理器线程,也可以通过选项文件配置单独的线程。

2.客户端连接线程管理

连接管理器线程在接收到每个客户端连接后,把请求转发到真正的执行线程,每个请求都对应一个执行线程,该线程处理连接的⾝份验证和具体请求。

执行线程使用线程池技术进行缓存,当一个请求需要处理时,先从线程池中查找是否有可用的线程,如果没有则新创建⼀个,当连接结束时,如果线程池没有满,则把当前线程放⼊线程池,主要的作⽤是提高线程的复⽤,减少创建线程造成的系统开销从而提高效率。

可以通过以下几个系统变量和状态变量控制和监视服务器管理客户端连接的线程:

  • 系统变量 thread_cache_size 决定了线程池缓存的大小。默认情况下,服务器在启动时会自动调整这个值,但也可以通过选项文件明确指定大小,值为 0 时禁用缓存,此时为每个新连接创建执行一个线程,并在连接断开时释放;
  • 有些复杂的SQL语句在执行过程中可能会有深层递归从而消耗更多的内存,通过设置thread_stack=N 调整线程堆栈大小;
  • 要查看缓存中的线程数以及超过缓存数后新创建的线程数,通过状态变量 Threads_cached 和
    Threads_created 查看;

在这里插入图片描述

3.连接量管理

  • 系统变量 max_connections 可以控制服务器允许同时连接的最大客户端数,当服务器达到
    max_connections 指定的连接数时会拒绝所有新的连接请求,同时会增加状态变量Connection_errors_max_connections 的值;
  • mysqld实际上允许 max_connections+1 个客户端连接。额外的连接为拥有CONNECTION_ADMIN 权限的帐户管理员)使⽤,即使普通连接达到了 max_connections 的数量,管理员也可以连接到服务器进⾏管理操作;
  • 在部署为主从复制的环境中,从节点的连接数也会计⼊ max_connections 中,如果连接达到上限主从复制将会失败;
  • max_connections 具体数据和服务器的硬件有关,比如可用的内存、每个连接消耗的内存,每个连接的工作负载、响应时间、可用文件描述符的数量等等。

三.服务层

数据库服务层是整个数据库服务器的核⼼,主要包括了服务管理和公共组件、NoSQL和SQL接⼝、解
析器、查询优化器和缓存等部分,下⾯我们分别介绍每个部分的作⽤:

1.服务管理和公共组件

MySQL提供了多种功能服务以满⾜不同使⽤场景下的需要,常用的服务如下:
• Backup & Recovery:备份与恢复,
• Security:安全,
• Replication:主从复制,
• Cluster:MySQL集群,
• Partitioning:表分区,
• Instance Manager:实例管理,
• Administrator:MySQL管理员,
• Migration Toolkit:迁移⼯具包,

2.NoSQL接⼝与SQL接⼝

主要负责接收客户端发送的各种SQL语句和命令,并将SQL发送到其他部分,然后把接收到的结果返回
给客户端。

3.Parser(语法分析器)

语法分析器的主要作用是将客户端发来的SQL语句中的关键字和自定义字段进行提取、解析,最终将 SQL 语句转换为⼀棵解析树,分析的过程中包含词法分析和语法分析;词法分析,主要是对关键字进行提取,比如 select/update/delete/create… ;语法分析,主要判断 SQL语句是否满足语法规则,如果语法错误则异出异常,也就是我们常见的ERROR 1064 (42000): You have an error in your SQL syntax
在这里插入图片描述
在这里插入图片描述

4.Optimizer(查询优化器)

通过语法校验的SQL语句将进⼊查询优化器处理阶段,查询优化器会将解析树转化为查询计划,⼀般情况下,⼀条查询可以有很多种执行方案,查询优化器会根据执行计划匹配合适的索引,选择最佳的执行方案,最终把确定要执行的SQL交给执行器调用存储引擎API。

TIPS:
优化后的SQL语句在条件查询时可能与程序员写的条件过滤顺序不同,但最终的返回结果⼀致.

5.Caches & Buffers(缓存)

MySQL的缓存主要的作用是为了提升查询的效率,当服务器接收到⼀个 select 查询语句时,会先进⼊缓存查询当前SQL语句在缓存中是否存在,缓存以 key 和 value 的形式存储,key是具体的SQL语句,value是结果的集合,如果命中缓存,直接返回结果,⽆法命中缓存,则进⼊分析器进⾏正常查询流程。

这⾥需要说明的是,缓存数据对应的数据在被更新之后将会失效,尤其在写多读少的场景中,缓
存会频繁失效与新增,命中率⾮常低,因此MySQL5.6之后服务层缓存功能默认关闭,⽽且在MySQL8.0中服务层缓存被官⽅删除,这⾥不做过多讨论。

6.SQL语句的执⾏流程

如下图所示:在这里插入图片描述

http://www.xdnf.cn/news/18254.html

相关文章:

  • MySQL实战45讲 24-25
  • hadoop技术栈(九)Hbase替代方案
  • Linux 进程间通信(IPC):信号、共享内存
  • Vue3 el-table实现 将子表字段动态显示在主表行尾
  • MySQL 三大日志:redo log、undo log、binlog 详解
  • 在职老D渗透日记day21:sqli-labs靶场通关(第27a关)get联合注入 过滤select和union “闭合
  • 趣谈设计模式之策略模式-比特咖啡给你一杯满满的情绪价值,让您在数字世界里”畅饮“
  • 基于VLM 的机器人操作视觉-语言-动作模型:综述 2
  • 选项式api和组合式api
  • 如何将Date类型的数据转换为LocalDateTime类型
  • Git的初步学习
  • 【力扣 Hot100】 刷题日记——双指针的经典应用
  • RabbitMQ:SpringAMQP Fanout Exchange(扇型交换机)
  • Java技术总监的成长之路(技术干货分享)
  • 驱动开发系列65 - NVIDIA 开源GPU驱动open-gpu-kernel-modules 目录结构
  • 【PyTorch】多对象分割项目
  • Apache Doris 4.0 AI 能力揭秘(一):AI 函数之 LLM 函数介绍
  • 云计算核心技术之云存储技术
  • oc-mirror plugin v2 错误could not establish the destination for the release i
  • Windows Server DNS优化,网络响应速度提升方案
  • C#传参调用外部exe
  • 【科研绘图系列】R语言绘制多组火山图
  • pytest+requests+allure自动化测试接入Jenkins学习
  • Apache IoTDB 大版本升级记录(成熟的2.0.2版本)
  • 机械原理的齿轮怎么学?
  • 从零开始理解一个复杂的 C++/CUDA 项目 Makefile
  • Chrome插件开发【windows】
  • MyCAT2的主从配置
  • 数据仓库OLTPOLAP维度讲解
  • Spring Cache 整合 Redis 实现高效缓存