IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【MySQL上分之路】第十二篇:MySQL一个请求的处理流程?淦 -> 正文阅读

[大数据]【MySQL上分之路】第十二篇:MySQL一个请求的处理流程?淦

杰尼龟开干

MySQL的请求流程

疑问?

MySQL数据库服务器在接收客户端请求后是怎么处理的呢?具体流程又是怎么样的呢?

前言

MySQL请求的具体流程走向得从MySQL的内部结构说起,MySQL的内部结构是由连接池、SQL接口、解析器、优化器、缓存、存储引擎等组成,整个结构可以分为三层,分别为MySQL Server层、存储引擎层和文件系统层,其中MySQL Server层又包括连接层和SQL层

MySQL的内部结构

Mysql基础架构图

图中Connect Pool为连接层 ,Management Services & Utillities、SQL Interface、Parser、Optimizer、Caches&Buffers为SQL层,Pluggable Storage Enigines为存储引擎层,File system和Files&Logs为文件系统层

Connectors为客户端以及不同语言与SQL的交互

连接层

应用程序主要是通过接口(ODBC、JDBC)来连接MySQL,这一层主要包括通信协议、线程处理、用户验证

Connection Pool(连接池)属于连接层。由于每次建立连接都需要消耗很多时间,连接池的作用就是将用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求缓存下来,下次可以直接用已经建立好的连接,提升服务器性能

SQL层

SQL层MySQL整个服务的中心,主要是包括权限判断、查询缓存、解析器、处理器、预处理器、查询优化器、缓存和执行

存储引擎层

Pluggable Storage Enigines为存储引擎层,主要是负责对MySQL数据库中数据的存储和提取,数据的存储都是以表的形式,所以存储引擎类型也可以称为表类型

文件系统层

文件系统层主要是将数据库的数据存储在操作系统的文件系统之上,并完成与存储引擎的交互

MySQL请求的流程?走向??

MySQL请求过程

连接层处理流程

连接层主要流程是分为连接处理和用户授权验证

连接处理

客户端通过连接管理模块与数据库服务端请求一个连接线程来建立TCP连接,首先先判断Connection Pool(连接池)是否有空闲的连接线程,有则分配给这个TCP连接,没有则线程管理模块创建新的线程来进行连接

  • 连接管理模块是主要负责监听对MySQL Server的各种请求,接收连接请求,然后将连接请求转发到线程管理模块
  • 连接线程主要是负责MySQL Server与客户端的一个通信,接收客户端的请求信息并且返回MySQL Server的结果信息
  • 线程管理模块主要是用来管理这些连接线程,包括建立线程和关闭线程以及线程的缓存

用户授权验证

在连接线程建立之后,用户操作之前需要调用用户模块对用户进行一个授权检查验证,只有验证之后连接线程才会真正接收并处理来自客户端的请求

  • 用户模块主要是负责用户的登录、验证以及用户的权限管理

SQL层处理流程

在MySQL中,客户端的请求可以分为两种类型:Query、Command,Query需要调用查询解析器才能执行,Command不需要解析器就可以直接执行

  • 当客户端执行SQL语句请求,Parser则会对该类型的请求进行语法分析和语义分析
  • SQL语句为Query类型,则会将控制权交给Query解析器,然后判断是否为Select类型的查询,是则调用查询缓存模块,再判断该查询是否在Query Cache(查询缓存)中,在则直接返回结果,没有则将控制权转交给Optimizer(查询优化器),对查询进行优化,并且执行该SQL语句
  • 当SQL语句为其他Insert、Delete类型,则会调用其他相应的模块来进行处理

存储引擎层处理流程

存储引擎收到执行SQL语句请求后,首先会通过控制模块检查用户是否拥有访问对应目标表和目标字段的权限,若有则会调用表管理模块请求相应的表并且获取对应的锁

  • 表管理模块打开相应表之后,就会根据该表的相关信息,判断表的存储引擎类型以及其他相关信息,然后根据表的存储引擎调用不同的存储引擎接口模块,然后进行处理
  • 表变更管理模块主要是负责完成一些 DML 和 DDL 的 query,如:update,delete,insert,create table,alter table 等语句的处理
  • InnoDB存储引擎存在一个Buffer Pool(缓冲池)的内存结构,Buffer Pool是将第一次查询的结果保存在Buffer Pool中,避免过多的磁盘IO操作,之后的查询可以先从Buffer Pool中寻找,若没有再去磁盘中查找,从磁盘找到之后会将查询到的写入到Buffer Pool中,然后再将查询结果返回给客户端

当客户端请求处理完成之后,控制权会交给连接线程模块,在处理过程中发生错误则会将相应错误信息返回给客户端,若有后续请求则会重复上面的过程,若与客户端断开连接,则连接线程模块则会释放该连接线程

总结

MySQL的内部结构是由连接池、SQL接口、解析器、优化器、缓存、存储引擎等组成,整个结构可以分为三层,分别为MySQL Server层、存储引擎层和文件系统层,MySQL请求在连接层主要流程是分为连接处理和用户授权验证,在SQL主要是SQL语句权限判断、查询缓存、解析器、处理器、预处理器、查询优化器、缓存和执行,在存储引擎层是根据表类型调用不同的存储引擎接口模块

赶紧学习起来吧!我是一个正在努力找回自我的人,希望能和一起学习的人成长,有错误的地方请各位大佬帮忙指正,如果觉得有帮助就点个赞当作对我的一个小肯定?👍,peace&love

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:14:33  更:2022-03-17 22:17:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:22:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码