Mysql软件架构详解一篇搞定

mysql 软件架构

ps:最近在了解Mysql。发一篇自己写的笔记。希望能帮助到小伙伴们。

Mysql软件架构详解一篇搞定

客户端

mysql的客户端 比如 jdbc odbc cli 这些客户端

连接器

连接器就是接受客户端通过tcp发来的指令,比如select * from z88j limit 5000; 先分发给缓存。

缓存(mysql8.0之后取消缓存功能)

mysql缓存的机制

比如上一秒刚查询过 select * from z88j limit 5000; 指令。他会把指令查询出的结果用KV形式保存再服务器内存中。再次运行相同sql不需要再去解析,优化和执行sql。

mysql缓存机制在什么时候失效?

在表的结构或数据发生改变时,查询缓存中的数据不在有效了。查询的缓存值相关内容也将被清空。而且 INSERT UPDATE DELETE TRUNCATE ALTER TABLE、DROP TABLE 、DROP DATABASE 都会导致缓存数据失效。

一般什么场景会用到?

对于更新频繁的表,查询缓存并不合适。但是对于一些不变的数据且有大量相同sql查询的表,查询缓存可以提高查询性能。比如:游戏按day分表后的游戏日志表。还有分表后的订单表。一般数据都很少会更新。

命中的条件是什么?

缓存以hash表的方式存在 服务器内存里面,以sql、和数据库名还有客户端协议等作为Key。

在判断命中前,mysql 不会去解析sql ,而是使用sql 去查询缓存。而且sql上的任何字符不同比如空格 注释都会导致缓存不命中,查询不确定的数据,也不会被缓存的 比如 like now() 这一类查询结果都不会被缓存。

Mysql8.0 为什么会取消缓存呢?

虽然MYSQL Query Cache 能很大成都提高命中的sql的查询性能,但是他只有在命中缓存后查询效果才有所改善,因此无法预测性能。

还有就是:查询缓存最大问题他会受到单个互斥锁的保护。在具有多核服务器上,大量查询会导致大量的互斥锁争用。所以现在Mysql5.6 默认禁用 8取消缓存。经过大量测试情况。建议把缓存放到客户端(比如redis 或者 Memcached)让专门处理kv 缓存的数据库去搞。

想详细了解可以百度:mysql缓存机制

分析器

分析器有什么作用?

对指令进行语法分析和词法分析,分析sql 语句的结构是什么样子的,有没有嵌套,分析出你要干什么。然后再给优化器去处理。

优化器

优化器是干什么的?

优化器的主要工作就是如何使用索引进行工作。优化器并不是十全十美的,也有缺陷,我们要知道优化器的缺陷在哪里,再写sql。把查询性能达到最优。比如:join 查询怎么走索引怎么连表查。

执行器

执行器的作用?

执行器进一步分析指令,做出执行计划,然后调用 innoDB 或者 MyISAM ,Archive。对系统文件读取和写入操作。还有就是校验权限此用户对数据是否有权限读取或修改。

存储引擎

存储引擎的主要是干什么的?

存储引擎的任务是将执行器的指令落实到数据文件上,不同的储存引擎的原理和执行方法有很大不同。比如:存储的数据结构。运行方式

常见的存储引擎有哪些?

  • 可以看https://www.z88j.com/39354.html 文章。有详细介绍

Mysql 软件架构执行流程

Mysql客户端通过TCP发送指令给缓存,缓存如果不命中。然后分析器进行分析给优化器。然后再给执行器。然后给对应的数据库引擎比如innodb 然后对文件系统进行读取和写入操作!(最终还是通过文件系统进行读取和写入操作的。)

Mysql 能看成什么架构?

首先是分层架构

Mysql软件架构详解一篇搞定

  1. 客户端是第一层 :前端或客户端
  2. 连接器第二层 :针对连接,接收连接
  3. 缓存 分析器 优化器执行器 是三层 :sql层 service层。主要就是处理sql
  4. 存储引擎是四层 :存储引擎
  5. 文件系统是五层。:读写

管道过滤器架构

Mysql软件架构详解一篇搞定

  1. 分析器 -> 优化器 -> 执行器 可以看做管道过滤架构

微核架构

Mysql软件架构详解一篇搞定

  1. 可以吧左边看成软件主体核心,右边插件部分。多一个插件(innodb)多一个功能,也就是所谓微核架构。
  2. 其实严格来说:连接器 缓存 分析器 优化器 执行器 是mysql 本体。右边的 innodb引擎 MyISAM等等引擎属于插件。可以想象成 vscode 的各种插件。

对架构不懂的可以看:https://www.z88j.com/39331.html (数据库软件中典型的几种架构)之前写的一篇文章 。

而且一个大型软件有很多架构。从微观可以看做微核 管道架构,从宏观可以看做分层架构。不要局限于单一的架构思想(重点思想,看事情要多方面)研究问题要有清晰的事业,分清除宏观和微观等等。

下面是画的流程图:

Mysql软件架构详解一篇搞定

原创文章,作者:星辰,如若转载,请注明出处:https://www.z88j.com/39340.html

(8)
打赏 微信扫一扫 微信扫一扫
上一篇 2022年9月7日 下午11:46
下一篇 2022年9月16日 上午12:32

相关推荐

发表回复

登录后才能评论

Warning: error_log(/www/wwwroot/www.z88j.com/wp-content/plugins/spider-analyser/#log/log-2921.txt): failed to open stream: No such file or directory in /www/wwwroot/www.z88j.com/wp-content/plugins/spider-analyser/spider.class.php on line 2900