- connection Pool(线程池)
1.1 功能
Authentication: 认证
Thread Reuse: 线程重用
Connection Limits: 连接数量限制
Check Memory: 检测内存(连接线程相关的内存)
caches:必要的线程缓存
Mysql是一个单进程多线程的应用,当用户通过Connetor向Mysql Server 发起请求连接时,通过线程池(Connection Pool)建立一个用户连接,此连接会话将会一直存在,用户可以通过此会话,发对应的SQL语句到服务端,服务端收到SQL语句时,将对语句完成执行
- SQL Interface
- Parser
3.1 功能
整个语句的执行分析,查询翻译,把一个查询语可以在本地句转化成对应的语句
分析用户请求的对应,数据库,表字段
3.2 认证过程
连入时验证账户,密码
验证成功后,分析用户是否有权限获取期望数据(Object Privilege检测过程)
生成多个执行树,多种路径其中最优
- Optimizer
分析衡量那种方法开销,代价最小(依赖于索引的各种内部组件,得到近似值)
考虑当前Mysql内部实现资源访问时的统计数据
一旦Optimizer发现有更优的实现目的方式,将会改写SQL语句
- 基于成本的执行计划
-
Mysql 会使用基于成本的(cost)优化器对执行计划进行选择,每个执行计划大致反应了该计划查询所需要的资源,主要因素是计算查询时所要访问的行数。(存储引擎获取数据统计数据和字典中元数据信息)
-
优化器会为每个操作标记成本,基准单位是随机读取数据页的成本
-
选择成本最小的最终执行
-
因为基于统计数据进行标记成本,可能部分样本无法反应整体情况,导致错误优化
-
Pluggable Storage Engine
存储负责把具体分析的结果,完成对磁盘上文件路径访问的转换
存储引擎将数据映射到磁盘块的内容加载到内存中
- Cache&&Buffers
把频繁访问的热点数据统统装入内存,用户访问直接在内存中修改
- 执行过程
7.1 客户端向MYSQL服务器发送一条查询请求
7.2 服务端首先检查查询缓存(Hash,查询本身hash值),如果命中缓存,则立刻返回结果(自定义函数,存储函数,用户变量,临时表,系统表都不会命中缓存)
7.3 服务器进行SQL解析(Parser),预处理,再由优化器(Optimizer)生成对应执行计划
7.4 MYSQL根据执行计划,调用存储引擎(PluggAble Storage Engine)API执行查询
7.5 将结果返回给客户端,同时缓存查询结果