MySQL 三层 架构
MySQL 架构总体来说分为三层,分别是连接层(或者说是网络层) 、执行层、存储引擎层.我们会分层大致简概括每层的大致功能。
连接层
连接层这层主要更能就是和客户端打交道,负责客户端初步权鉴(后面到执行层还会再做一次权鉴,检查这个用户有没有权限操作这个表,当前操作和当前用户配置的可操作权限是否相符合)和传递SQL语句数据包到执行层。MySq在连接层维护有一个一对一模式的线程池,有客户端过来时,会分配一条线程专门处理这个客户端的网络数据。
执行层
执行层是MySQL 各种功能实现层,这层的组件或者说模块很多。一个语句的执行经由连接层传递来到执行层会做如下动作:
- 先做过语法检查器的基本检查
- 如果是查询语句会通过数据的SQL哈希查询查询缓存,有则返回。(5.7的时候被标记为废弃,8.0被完全移除)
- 会构建解析树
- 优化器通过通用引擎接口层API向存储引擎询获取存储引擎特性,以及当前语句操作的表的一些统计信息,根据上面的信息对其进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。用户可以通过特殊关键字向优化器传递提示,从而影响优化器的决策过程。
- 调用引擎通用接口,执行语句
- 返回执行结果
存储引擎层
这层就之后一个工作,存储数据,通过数据:
- 根据接入引擎预设特性,以特定数据结构组织数据存储到磁盘中
- 根据引擎特性给数据添加索引
- 通过磁盘读取-查询数据供上层使用。