MySQL 架构

news2024/12/28 5:30:35

本篇主要介绍一下MySQL的架构

目录

一、整体架构

二、连接层

网络端口

连接管理线程 

三、服务层

NoSQL接口与SQL接口

Parser(语法分析器)

 Optimizer(查询优化器)

Cache & Buffers(缓存)

四、存储引擎层 


一、整体架构

MySQL的整体架构如下图所示:

下面我们来简单了解一下该图中各部分的含义:

  • MySQL Connectors :指的是MySQL为各编程语言提供的访问接口,例如,JDBC,通过这些接口就能直接在编写的程序里访问MySQL。
  •  MySQL Shell : 是一个较为高级的MySQL客户端和代码编辑器,需要单独安装才能使用,除了具有MySQL客户端的功能之外还具有能够被JS语言,python语言调用访问的接口。通常情况下,MySQL Shell提供给数据库开发人员使用。
  • 连接层:对来自客户端的连接进行权限验证并将相关的连接信息维护到连接池中,以便于下次连接。
  • 服务管理和公共组件:提供了数据备份与恢复,安全组件,主从复制和集群管理、表分区等相关功能。
  • 服务层:提供NoSQL,SQL的API,SQL解析,SQL语句优化,SQL语句缓存等相关组件。
  • 存储引擎层:提供了一系列可插拔的存储引擎,我们可以通过存储引擎来进行数据的写入与读取,通过存储引擎,我们可以真正的与硬盘中的数据和日志进行交互我们可以根据需求来选择合适的存储引擎进行使用。
  • 文件系统层:该层包含了具体的日志文件和数据文件以及MySQL相关的程序。

下面我们具体来了解一下该架构中的连接层,服务层和存储引擎层。

二、连接层

MySQL的连接层主要处理客户端与服务器的连接。

网络端口

在MySQL服务器中,可以开放多个端口来监听来自客户端的连接,但默认只使用3306进行监听,如果需要开启多个端口来监听,可以通过配置文件来设置,具体如下:

[mysqld] #服务器节点

port=3306 #监听端口1

port=3307 #监听端口2

连接管理线程 

对于端口监听到的连接请求通过连接管理线程来处理,但针对不同的平台,连接管理线程的使用略有不同,具体如下:

  • 在所有平台上,mysql都会创建一个连接管理线程来处理所有TCP/IP请求。
  • 在unix平台上,这个连接管理线程则还能够用来 处理unix socket的连接请求。
  • 在windows上,则会创建一个连接管理线程来处理Shared - memeory的连接请求,创建另一个连接管理线程来处理Named-pipe方式的连接请求
  • 在所有平台上,都能额外开启一个端口单独用作TCP/IP请求的监听,然后使用前面说的处理所有TCP/IP请求的连接管理线程来处理这个端口上的请求,也可以通过配置文件,单独创建一个连接管理线程来处理这些连接请求。

下面我们来了解一下连接管理线程的工作流程:

连接管理线程在处理连接请求时会将请求一对一的转发给执行线程,由该执行线程来处理具体的的身份验证和处理连接请求。执行线程通过线程池进行管理,线程池会事先创建好执行线程并缓存,当有请求转发过来时,会先去该线程池中寻找是否有能够使用的执行线程,如果没有则创建一个 ,当该新建的执行线程处理完成请求后,会去看线程池是否还有空间,如果有则把该线程放入线程池,如果没有则销毁,使用线程池主要是提高线程的复用并减少创建线程所带来的开销以提高性能。

对于上面提到的线程池,我们可以通过一些系统变量来查看或设置与其相关的参数,具体如下:

thread_cache_size :线程池中缓存的大小,决定了能包含多少执行线程

thread_stack: 执行线程的堆栈大小,用来防止执行线程因递归太深等原因分配过多的内存用作栈空间

threads_cached:缓存中的线程数

threads_created : 超出线程池缓存,新创建的执行线程的数量

 在MySQL中存在最大的允许同一时间连接的客户端数,该数通过系统变量max_connections来设置,如果连接数超过该值,则会拒绝所有的连接,并增加状态变量Connection_errors_max_connection的值,但也有例外,如果当前的连接请求是由具有管理员权限的用户发起的,则不会拒绝该连接请求,因此mysqld实际上是允许max_connections+1个客户端同时建立连接的。需要注意的是,在主从复制的环境中,从节点的连接也会被计入max_connections.max_connections的设定应该参照当前硬件环境的性能。

三、服务层

数据库服务层是mysqld的核心部分,下面我们来具体了解一下他各部分内容:

NoSQL接口与SQL接口

该部分主要用来接收和来自客户端的SQL语句,然后将语句转发给服务层的其它部分进行处理,最后再将 处理结果返回给客户端。

Parser(语法分析器)

语法分析的功能主要是将SQL中的关键字和用户定义的字段提取出来并分析,最终形成一棵解析树,分析的过程包括词法分析和语法分析,词法分析,主要是对关键字进行提取,比如“delete,create,select.....”。语法分析主要是分析SQL中是否有语法错误,也就是我们常见的ERROR1064 (42000):You have an error in your SQL syntax。

例如下面这条SQL

select sn, name from student where id = 1;

可以转换成如下解析树:

 Optimizer(查询优化器)

通过词法分析器处理过后的语句将会交由查询优化器进行优化,查询优化器会根据前面生成的解析树生成一系列执行计划,然后根据查执行计划匹配索引,最终找到一条性能最好的执行计划,然后将该执行计划的SQL交给执行器,执行器就会调用存储引擎提供的api来真正执行该SQL。

Cache & Buffers(缓存)

MySQL的缓存主要用来提高查询语句的性能,当客户端传来一条查询的SQL时,会先去缓存中查是否存在该SQL,缓存中,SQL与SQL的执行结果通过key-value的方式进行组织,存在直接返回对应的value。如果不存在,则继续通过前面的词法分析器,查询优化器,以正常的流程执行该SQL。需要注意的是,如果缓存中的value中记录的数据发生了更改,也就是说当前该语句的执行结果已经变化了,则会删除这条缓存,因此在写多读少的情况下,命中缓存(使用缓存)的几率就会很低,而缓存的创建和修改操作则会十分频繁,从而浪费大量的性能,因此在MySQL8.0之后的版本,服务层的缓存已经被官方删除了,不再使用。

最后我们通过下图来具体看一下一条SQL在MySQL服务层的执行过程:

四、存储引擎层 

存储引擎层用来具体完成SQL语句的执行以及与文件系统的交互,里面包含了一系列可插拔的存储引擎组件,用来处理并执行对应表类型的SQL,这些存储引擎组件,可以在MySQL运行时进行动态的加载和卸载。通过下面这条SQL,我们能够查看到当前MySQL支持哪些存储引擎:

show engines;

 其中,NO表示支持,Yes表示不支持,default表示当前服务器在创建表时默认使用该存储引擎。有关这些存储引擎的特点和详细内容将在下一篇博客中介绍。

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

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

相关文章

可复用验证的测试用例 5大编写技巧

编写可复用验证的测试用例,节省了编写新测试用例的时间和资源,提高了测试效率和项目质量,减少错误修复成本,有利于实现较高的投入产出比。缺乏可复用的测试用例会导致测试团队不断重复创建相似的测试场景,消耗大量时间…

CleanMyMac中文版2024破解版安装包下载最新官方免费激活码

CleanMyMac中文版,让你的电脑焕然一新! 大家好,今天我要给大家推荐一款神奇的软件——CleanMyMac中文版。作为一个长期使用Mac的用户,我一直在寻找一款能够彻底清理电脑垃圾和优化系统的工具,而CleanMyMac正是我心心念…

封装音视频编解码和渲染的动态链接库编译和测试

1.动态链接库的编译 生成了以下几个文件 我们把生成的lib文件复制到lib文件夹中 其余三个文件不变动 2.进行测试看是否可以用生成的xcodec.lib库文件里的接口函数 以上是重新创建的新项目,导入了xcodec.lib,其他配置同以前项目 库测试结果 运行显示我们…

优思学院|精益生产10大工具全解析

精益生产是一种管理哲学,其核心思想是通过消除浪费、持续改进和最大化价值来提高企业效率和效益。本文将详细解析精益生产的10大工具,帮助企业更好地理解和实施精益生产,以实现卓越的经营绩效。 一、价值流图 (Value Stream Mapping) 前言 …

大模型的分类:探索多样化的人工智能模型

随着人工智能技术的飞速发展,大型预训练模型(以下简称“大模型”)已经在自然语言处理、计算机视觉、语音识别等多个领域取得了显著的成果。这些模型通过在海量数据上进行预训练,能够捕捉到丰富的特征信息,为各种下游任…

C#标志位的使用

C#作为一种功能强大的编程语言,是在.NET框架中广泛使用的语言之一。在实际应用中,C#的标志位在各种系统设计和编程实践中会涉及到。这篇文章将讨论如何使用C#的标志位来跟踪报警声音的播放状态。 报警系统是一种广泛应用的系统,它可以在关键时…

软件性能测试之负载测试、压力测试详情介绍

负载测试和压力测试是软件性能测试中的两个重要概念,它们在保证软件质量和性能方面起到至关重要的作用,本文将从多个角度详细介绍这两种测试类型。 一、软件负载测试   负载测试是在特定条件下对软件系统进行长时间运行和大数据量处理的测试&#xff…

shell脚本中的变量

关于Linux操作系统中当前shell进程与子shell进程的详细解释 如上图所示,使用ps -f可以当前查看Linux操作系统中当前正在运行的进程。 然后敲bash后,相当于在当前的bash shell环境下又创建了一个子bash shell的进程, 如上图所示,…

Apache Druid-时序数据库

Apache Druid:是是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台,旨在对大型数据集进行快速的查询分析("OLAP"查询)。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景&…

手把手带你实现一个简单的轮播图

轮播图现有成熟的插件非常多,但做为一名学习中的想要成为前端开发的小伙伴们来说,自己动手实现一个轮播图,还是很锻炼的,实现完成后,也是很有成就感的。下面,我们来实现一个简单的轮播图吧。 目录 1 HTML …

DIY一个PE启动盘

原文:https://blog.c12th.cn/archives/18.html 前言 有天,朋友问我有没有带集成软件的U盘启动盘。我也是很久没有弄启动盘了,有次在逛b站时无意中看到还有可以DIY的启动盘,于是就教程就来了… 该两种方法,已在三台实体…

SCADA软件地毯式介绍,你想知道的都在这里.

很多小伙伴对SCADA很陌生,殊不知这个可是智慧工业制造的大脑和中枢神经,很多指令的发出,监控状态的现实都得通过这个系统,本文详解介绍一下什么是SCADA,重大作用,其在工业制造中的位置,以及市面…

停车场控制机系统哪家好?捷顺捷曜分体式车场控制机有哪些功能亮点?

停车场控制机为现代城市提供了许多便利和好处。首先,它能够自动记录车辆进出的时间,便于车主和管理人员进行费用计算。其次,通过车牌识别技术,提高了车辆进出的效率,减少了排队等待时间。此外,控制机还可以…

【Pepper机器人开发与应用】二、Pepper机器人图形化开发:医疗服务机器人程序设计

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主 📑上期文章:『【Pepper机器人开发与应用】一、教你如何使用图形化开发软件高效开发pepper机器人(Pepper SDK for LabVIEW&#xff09…

MFC开发 解决:VSstudio2019 无法打开afxwin.h 或 安装afxwin.h

在进行MFC开发的学习中,在win10系统下使用vs studio2019进行mfc开发,出现的标题的问题 首先,如果你以及安装过了afxwin.h相关环境 那么按照如下步骤 首先 打开工程的属性 在 高级——MFC的使用——选择在共享DLL中使用MFC 如下 …

JVM 基本组成

一、为什么要学习 JVM ? 1. “ ⾯试造⽕箭,⼯作拧螺丝” , JVM 属于⾯试官特别喜欢提问的知识点; 2. 未来在⼯作场景中,也许你会遇到以下场景: 线上系统突然宕机,系统⽆法访问,甚⾄直…

【AICFD教程】汽车外气动仿真,小白学CFD的入门案例

【视频教程】 【教程】汽车外气动仿真,小白学CFD的入门案例 【文字教程】 1. 案例背景 1.1 学习目标 本案例针对某汽车仿真模型,在车速为40m/s时进行了汽车外流场的数值模拟。 本案例教程旨在演示AICFD中以下场景与功能的操作: a. 单域外…

JavaScript和promise——0_1 promise

文章目录 是什么?未来值回调和未来值在回调环境下这么和未来值交互?群居的未来值其他的解决方案 这样写可以实现目标效果。可是,这样写优雅吗? 英雄登场关键词:then关键词:回调 为什么promise不需要start函…

在等保2.0框架下,如何进行有效的物联网设备安全培训和意识提升?

在等保2.0框架下,进行有效的物联网设备安全培训和意识提升,可以从以下几个方面入手: 1. 分层次培训内容设计: • 基础知识普及:涵盖物联网的定义、特点及其面临的安全威胁和攻击手段,让员工理解物联网安全…

技巧|手机上看SwanLab实验的两种方法

什么是SwanLab? SwanLab是一个深度学习实验管理与训练可视化工具,由西安电子科技大学创业团队打造,融合了Weights & Biases与Tensorboard的特点,可以记录整个实验的超参数、指标、训练环境、Python版本等,并可视化图表&…