跟SqlServer的架构包括其中的组件很类似,

MySQL Server 体系结构及查询大致流程_存储引擎

上图来自 https://www.mysql.com/common/images/PSEA_diagram.jpg 

 

可以看到MySQL Server 体系结构也分为四层:

  • 网络连接层
  • 关系引擎层(核心服务层)
  • 存储引擎层
  • 物理文件层

 

一、 网络连接层

Connection Pool(连接池)

  • 管理缓冲用户连接,线程处理等需要缓存的需求
  • 进行用户账号、密码和库表权限验证

 

二、 关系引擎层(核心服务层)

又分为四类(也类似SqlServer):

  • SQL Interface(SQL接口)
  • Parser(解析器)
  • Optimizer(查询优化器)
  • Cache&Buffers(缓存)

 

1. SQL Interface(SQL接口)

  • 接收用户发来的sql语句并返回执行结果

 

2. Parser(解析器)

  • 将sql语句解析成mysql认识的数据结构
  • 解析的同时会对sql进行语法检验

 

3. Optimizer(查询优化器)

  • 对sql语句进行优化,同时选出较好的执行计划(注意未必是最好的)
  • 使用策略为“选取-投影-联接”

 

4. Cache&Buffers(缓存)

  • 包含query_cache、表缓存、记录缓存、key缓存、权限缓存等
  • 查询缓存主要用于MyISAM引擎,并且在8.0版本已废弃。它对于InnoDB引擎没有意义,因为InnoDB有自己的一套缓存机制
  • 注意这些是属于服务层的功能,这部分缓存别的存储引擎仍需要用到

 

三、 存储引擎层

  • MySQL有很多种类型的插件式存储引擎,可以根据需要选择。

 

四、 物理文件层


 

上述组件是如何协同工作的?来看一个简单的查询在MySQL中的生命周期:

五、 MySQL查询大致流程

  1. Connectors(即客户端)对MySQL Server的监听端口发起请求
  2. 在 Connection Pool 创建连接、分配线程,验证用户名密码及库表权限
  3. 如果打开了query_cache(8.0版本已废弃),进行检查,若有数据则直接返回,没有则继续往下执行
  4. SQL Interface 接收sql语句并传给Parser进行解析和语法检验
  5. Optimizer 对sql进行优化并选出较好的执行计划
  6. 调用存储引擎接口,打开表,执行查询,检查存储引擎缓存中是否有对应缓存记录,有则返回,无则继续执行
  7. 到磁盘物理文件中寻找数据
  8. 找到所需数据后,先写回存储引擎缓存。如果打开了query_cache,也会进行写入
  9. 通过SQL Interface 返回数据给客户端
  10. 关闭表
  11. 关闭线程
  12. 关闭连接

 

简单了解了MySQL Server 体系结构及查询大致流程,下一篇学习InnoDB存储引擎的体系结构。

 

参考:《MySQL 性能优化金字塔法则》