序
两张图了解 MySQL 的体系架构和查询执行流程。
体系架构图
Connectors 指各类语言与 MySQL 服务器的交互 API。
Connection Pool 是连接池组件。
负责管理连接和权限验证:跟客户端建立连接、获取权限、维持和管理连接。
每个成功连接 MySQL Server 的客户请求都会被创建或分配一个线程,该线程负责客户端与 MySQL Server 端的通信,接收客户端发送的命令,传递服务端的结果信息等。线程池组件提供线程重用、连接限制等能力。
Management Services & Utillties 是管理服务和工具组件。
提供对MySQL的集成管理,如备份(Backup),恢复(Recovery),安全管理(Security)等
SQL Interface 是 SQL 接口组件。
接收用户SQL命令,如DML,DDL和存储过程等,并将最终结果返回给用户。
Parse 是解析器组件。
MySQL 解析器将使用 MySQL 语法规则验证和解析查询。
预处理器根据一些 MySQL 规则进一步检查解析树是否合法并验证权限。
Optimizer 是优化器组件
将解析器生成的“解析树”转换成执行计划。
MySQL 使用基于成本的优化器找到最好的执行计划
Caches&Buffers 是缓冲组件
缓存和缓冲组件
Pluggable Storage Engines Memory, Index & Storage Management 是可插拔的存储引擎组件
查询流程图
整体流程描述:
-
客户端发送一条查询到服务器,
-
查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。
有一篇查询缓存的学习总结文章,有兴趣可以点这里看下
-
服务器进行 SQL 解析、预处理,再由优化器生成对应的执行计划。
有一篇关于 MySQL 基于成本的优化器的学习总结文章,有兴趣可以点这里
-
MySQL 根据优化器生成的执行计划,调用存储引擎的 API 来执行查询。
-
将结果返回给客户端
注:如果开启了查询缓存,那么 MySQL 也会将结果存放在查询缓存中。
MySQL 将结果集返回客户端是一个增量、逐步返回的过程。这样做服务器端无须存储太多的结果,也就不会因为要返回太多结果而消耗太多内存。客户端也能第一时间获得返回的结果。
其他
本文插图使用 processon 绘制。
第一张体系架构图内容参考《MySQL技术内幕:InnoDB存储引擎》。
第二张查询流程图内容参考《高性能MySQL》。
作者还不太擅长写文章,但本次做到了以下几点:
- 正文中涉及英文字符和阿拉伯数字的地方左右都使用了空格分隔
- 有写序
- 用心绘图
如果觉得本文对您有帮助,请留个红心赞再走,如果有兴趣也可以浏览作者的其他文章。
如果觉得本文浪费了您的时间,希望评论区能留下您的宝贵意见。
如果有疑问也请留言,作者愿花时间和精力去找寻答案,一起探讨学习。