MYSQL架构——逻辑架构

目录

一、整理逻辑架构

1、连接层

 2、服务层

3、引擎层 

4、存储层

二、查询SQL执行周期

 1、修改配置文件,开启查询缓存

2、开启查询执行计划

3、执行两次相同查询语句

4、显示最近执行的SQL语句

5、查询6,7执行计划

三、查询流程


 

一、整理逻辑架构

MySQL主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。如下图:

MYSQL架构——逻辑架构_第1张图片

1、连接层

 (1)为客户端连接服务,包含本地socket通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信;

 (2)主要完成连接处理,授权认证,安全处理;

 (3)引入线程池,为通过安全认证的客户端提供线程;

 (4)同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 

 2、服务层

该层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。

(1)Management Serveices & Utilities: 系统管理和控制工具  ;

(2)SQL interface :接受用户SQL命令,并返回用户查询结果;

(3)Parser: 解析器:SQL命令解析与验证;

MYSQL架构——逻辑架构_第2张图片

(4) Optimizer: 查询优化器;

(5) Cache和Buffer: 如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等 。

 

3、引擎层 

存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。

4、存储层

 数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。 

二、查询SQL执行周期

 1、修改配置文件,开启查询缓存

(1)修改配置文件/etc/my.cnf,新增一行:query_cache_type=1

MYSQL架构——逻辑架构_第3张图片

重启MySQL服务

systemctl restart mysqld

2、开启查询执行计划

show variables  like '%profiling%';

set profiling=1;

MYSQL架构——逻辑架构_第4张图片

3、执行两次相同查询语句

select * from mydb.mytbl where id=1 ; 

MYSQL架构——逻辑架构_第5张图片

4、显示最近执行的SQL语句

show profiles; 

MYSQL架构——逻辑架构_第6张图片

5、查询6,7执行计划

(1)6的执行计划

show profile cpu,block io for query 6;

MYSQL架构——逻辑架构_第7张图片

(2)查询7的执行计划

 

show profile cpu,block io for query 7;

MYSQL架构——逻辑架构_第8张图片

 可以发现7执行的编号比6少了很多信息,说明查询语句可以冲从缓存中获取数据,SQL语句必须一致才可以缓存命中,如果对·数据库insert,update,delete,缓存则会失效

三、查询流程

1、mysql客户端与服务端进行连接,发送查询语句,服务端会先检查缓存(query cache),若缓存中有与该查询语句一样的语句,直接返回结果,否则进行语句解析;

2、如果某个查询结果已经位于缓存中,服务器就不会再对查询进行解析、优化、以及执行。它仅仅将缓存中的结果返回给用户即可,这将大大提高系统的性能;

3、语法解析器和预处理:首先mysql通过关键字将SQL语句进行解析,并生成一颗对应的“解析树”;

4、mysql解析器将使用mysql语法规则验证和解析查询;

5、预处理器则根据一些mysql规则进一步检查解析树是否合法,当查询优化器当解析树被认为是合法的了,并且由优化器将其转化成执行计划;

6、一条查询可以有很多种执行方式,最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。

7、然后,mysql默认使用的BTREE索引,并且一个大致方向是:无论怎么折腾sql,至少在目前来说,mysql只少用到表中的一个索引。

 

你可能感兴趣的:(MYSQL架构,数据库,mysql)