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架构

先放一张图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I9Sn5jiJ-1665728445419)(https://mmbiz.qpic.cn/mmbiz_png/AaKTtPGkoWKeNnaiawcAKehCXnveVAEzQf2utSOeOG1X12ibybibUsHxvz9bQGr1oKTiaYwZhicicDxTplfF6MWf36Lg/640?wx_fmt=png)]

引用自:https://dev.mysql.com/doc/refman/8.0/en/pluggable-storage-overview.html 没找到5.7的架构图,找了一张8.0的架构图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h6vNCErS-1665728445421)(https://mmbiz.qpic.cn/mmbiz_png/AaKTtPGkoWKeNnaiawcAKehCXnveVAEzQibW87EiaicxSnib2wib8QpaFz1m3licF4punL9kz1hF53l6gszVDxT5lr6Ag/640?wx_fmt=png)]

从MySQL的架构图来看,mysql一共有两种连接方式

  • 各语言封装的客户端连接器

  • MySQL Shell 脚本直连

进入MySQL Server端后包含了三大分类

Server层

连接管理器层(服务端)

  • 用来客户端连接器请求过来以后,验证账户和密码,不正确,立马返回Access denied for user

  • 验证通过,查询账户拥有的权限,并缓存起来;

  • 此链接是一个长链接(长链接的好处就不说了),MySQL也不会让你啥也不干一直连着,所以就有了超时时间,由wait_timeout 控制(断开是服务器端断开,客户端再请求过来就报 Lost connection to MySQL server during query)

  • 链接器采用池化技术,节省了创建和销毁的成本;

  • 一个客户端请求服务端分配一个线程(从线程里取),把线程池占满了,再连就报连接满了;

  • 客户端一般也采用池化技术,优化请求,防止每次执行SQL都需要建立连接,减少开销;

  • 长连接带来一个问题,有些SQL在执行的过程中将对象绑定到连接上,连接不释放,内存不回收,会导致MySQL占用内存涨的特别快,可以通过以下方式解决

  • 定期断开长连接(需要重连和权限验证)

  • MySQL5.7或更新的版本,可以通过执行mysql_reset_connection来重新初始化连接(相比上一个方案,不需要重连和权限验证)

解析与优化层

  • 在解析与优化这一层,有两个接口,一个是MySQL操作SQL的接口,一个是MySQL操作NoSQL的接口,这块主要是让制定标准,让大家使用的时候,按标准来

  • NoSQL 操作的接口 从5.7.12就可以使用,在8.0中默认就启用了(需要启用x plugin)

  • 查询缓存(MySQL8 将这块删除了)

  • MySQL接收到请求后,会先看缓存中有没有(之前查询的结果会以k-v的方式存储在内存里,k是语句,v是结果)

  • 一般情况下查询缓存的命中率是非常低的(除非你的数据是静态的)

  • 可以通过在select 后加SQL_CACHE 来显示指定使用查询缓存

  • 缓存

  • mysql8中是全局缓存,以及引擎缓存,比如InnoDB的cache buffer

  • 比如表记录,权限这些都是全局缓存

  • 解析器

  • MySQL在真正执行语句之前,会去parser你的查询语言,了解你要做什么

  • 在这个过程会判断你的语法是否正确

  • 将查询字段,表,条件封装到内部的数据结构上形成解析树

  • 优化器

  • 通过语法解析,MySQL知道你的真实意图了,但你写的SQL不一定是高效的

  • 这个时候MySQL会给我们的SQL做些优化调整,比如:使用哪个索引,外连接转换为内连接,多表连接的时候,表的连接顺序

  • 从而确定最终的执行方案

  • 这个优化策略主要有两种:静态优化(编译时优化) 和动态优化(运行时,sql基本上都是动态)

  • 等价变换策略:比如 x<y and x=5 优化为y>5 and x=5,以及联合索引的位置调整

  • 函数查询优化:比如:min 直接从索引的左侧开始查,max从右;

  • in的优化:先对in的条件进行优化,再进行二分查找

  • 执行器

  • 解析完了,也优化完了,那就该执行了

  • 别急,还没完,你有权限吗?没有,直接拒绝执行,有才可以执行

  • 执行器操作的是下一层的存储引擎

存储引擎层(可插拔)

  • MySQL将操作封装成了接口,屏蔽了不同存储引擎的差异,各种存储引擎实现了这些操作接口,内部又差异化的做了各种扩展;

  • 比如InnoDB锁的粒度到表级,InnoDB的事务,都是差异性的

  • 我们可以通过show engines来查看支持的存储引擎

  • 存储引擎同一个实例只能启用一种

文件系统层

  • 文件系统由各操作系统提供

  • MySQL将其持久化的数据物理存储在磁盘上,持久化保存数据、索引、binlog、redolog、undolog、error日志、慢sql等;

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:41:07  更:2022-10-17 12:44:10 
 
开发: 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/16 19:56:57-

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