MySQL查询执行流程
架构总览
下面就是MySQL 的逻辑架构,sql layer主要负责如下功能:权限判断、sql解析、执行计划优化、query cache的处理等操作,这些操作都是在数据库系统处理底层数据之前的工作;
Storage Engine Layer主要负责底层数据存取的实现,由多种存储引擎共同组成。
SQL Layer 中包含了多个子模块,
结构图如下
1、初始化模块
顾名思议,初始化模块就是在mysql Server 启动的时候,对整个系统做各种各样的初始化操作,比如各种buffer,cache 结构的初始化和内存空间的申请,各种系统变量的初始化设定,各种存储引擎的初始化设置,等等。
2、核心API
核心API 模块主要是为了提供一些需要非常高效的底层操作功能的优化实现,包括各种底层数据结构的实现,特殊算法的实现,字符串处理,数字处理等,小文件I/O,格式化输
出,以及最重要的内存管理部分。核心API 模块的所有源代码都集中在mysys 和strings文件夹下面,有兴趣的读者可以研究研究。
3、网络交互模块
底层网络交互模块抽象出底层网络交互所使用的接口api,实现底层网络数据的接收与发送,以方便其他各个模块调用,以及对这一部分的维护。所有源码都在vio 文件夹下面。
4、Client & Server 交互协议模块
任何C/S 结构的软件系统,都肯定会有自己独有的信息交互协议,MySQL 也不例外。MySQL的Client & Server 交互协议模块部分,实现了客户端与MySQL 交互过程中的所有协议。当然这些协议都是建立在现有的OS 和网络协议之上的,如TCP/IP 以及Unix Socket。
5、用户模块
用户模块所实现的功能,主要包括用户的登录连接权限控制和用户的授权管理。他就像MySQL 的大门守卫一样,决定是否给来访者“开门”。
6、访问控制模块
造访客人进门了就可以想干嘛就干嘛吗?为了安全考虑,肯定不能如此随意。这时候就需要访问控制模块实时监控客人的每一个动作,给不同的客人以不同的权限。访问控制模块实现的功能就是根据用户模块中各用户的授权信息,以及数据库自身特有的各种约束,来控制用户对数据的访问。用户模块和访问控制模块两者结合起来,组成了MySQL 整个数据库系统的权限安全管理的功能。
7、连接管理、连接线程和线程管理
连接管理模块负责监听对MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责MySQL Server 与客户端的通信,接受客户端的命令请求,传递Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的cache 等。
8、Query 解析和转发模块
在MySQL 中我们习惯将所有Client 端发送给Server 端的命令都称为query,在MySQLServer 里面,连接线程接收到客户端的一个Query 后,会直接将该query 传递给专门负责
将各种Query 进行分类然后转发给各个对应的处理模块,这个模块就是query 解析和转发模块。其主要工作就是将query 语句进行语义和语法的分析,然后按照不同的操作类型进行分类,然后做出针对性的转发。
9、Query Cache 模块
Query Cache 模块在MySQL 中是一个非常重要的模块,他的主要功能是将客户端提交给MySQL 的Select 类query 请求的返回结果集cache 到内存中,与该query 的一个hash 值做一个对应。该Query 所取数据的基表发生任何数据的变化之后,MySQL 会自动使该query