MySQL整体逻辑架构

MySQL 整体逻辑架构

非原创-记录下

包括

  • MySQL整体逻辑架构
  • 查询执行流程
  • SQL解析顺序

MySQL整体逻辑架构(MySQL`s Logical Architecture)

![MySQL`s Logical Architecture](./images/mysql/logic1.jpg)

第一层,即最上一层,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。

第二层值得关注。这是MySQL的核心部分。通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视图等。

第三层包括了存储引擎。通常叫做StorEngine Layer,也就是底层数据存取操作实现部分,由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据。就像Linux众多的文件系统一样。每个存储引擎都有自己的优点和缺陷。服务器是通过存储引擎API来与它们交互的。这个接口隐藏了各个存储引擎不同的地方。对于查询层尽可能的透明。这个API包含了很多底层的操作。如开始一个事物,或者取出有特定主键的行。存储引擎不能解析SQL,互相之间也不能通信。仅仅是简单的响应服务器 的请求。

查询执行流程

下面再向前走一些,容我根据自己的认识说一下查询执行的流程是怎样的:

![MySQL`s ](./images/mysql/logic2.bmp)

  1. 连接
    • 1.1 客户端发起一条Query请求,监听客户端的连接管理模块接收请求
    • 1.2 将请求转发到连接进/线程模块
    • 1.3 调用用户模块来进行授权检查
    • 1.4 通过检查后,连接进/线程模块线程连接池中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求
  2. 处理
    • 2.1先查询缓存,检查Query语句是否完全匹配,接着再检查是否具有权限,都成功则直接取数据返回
    • 2.2上一步有失败则转交给命令解析器,经过词法分析,语法分析后生成解析树
    • 2.3接下来是预处理阶段,处理解析器无法解决的语义,检查权限等,生成新的解析树
    • 2.4再转交给对应的模块处理
    • 2.5如果是SELECT查询还会经由查询优化器做大量的优化,生成执行计划
    • 2.6模块收到请求后,通过访问控制模块检查所连接的用户是否有访问目标表和目标字段的权限
    • 2.7有则调用表管理模块,先是查看table cache中是否存在,有则直接对应的表和获取锁,否则重新打开表文件
    • 2.8根据表的meta数据,获取表的存储引擎类型等信息,通过接口调用对应的存储引擎处理
    • 2.9上述过程中产生数据变化的时候,若打开日志功能,则会记录到相应二进制日志文件中
  3. 结果
    • 3.1Query请求完成后,将结果集返回给连接进/线程模块
    • 3.2返回的也可以是相应的状态标识,如成功或失败等
    • 3.3连接进/线程模块进行后续的清理工作,并继续等待请求或断开与客户端的连接

![MySQL`s ](./images/mysql/logic3.png)

SQL解析顺序

接下来再走一步,让我们看看一条SQL语句的前世今生。

首先看一下示例语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT DISTINCT
< select_list >
FROM
< left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
< where_condition >
GROUP BY
< group_by_list >
HAVING
< having_condition >
ORDER BY
< order_by_condition >
LIMIT < limit_number >

然而它的执行顺序是这样的

1
2
3
4
5
6
7
8
9
10
FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
SELECT
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number>

参考:

MySQL架构总览->查询执行流程->SQL解析顺序: https://www.bbsmax.com/A/kvJ3oRwJgM/

MySQL整体逻辑架构:https://blog.csdn.net/ajian005/article/details/17427981


Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×