浅析——mysql语句执行过程&&mysql架构

Posted 明天一定.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析——mysql语句执行过程&&mysql架构相关的知识,希望对你有一定的参考价值。

目录

语句执行过程

什么是半双工

架构

网络连接层

服务层

线程池

sql接口

解析器

优化器

缓存

管理服务组件和工具组件

存储引擎层

系统文件层


语句执行过程

  1. 建立连接。通过客户端/服务器通讯协议建立连接,通信方式是半双工。建立的连接有一个线程监控状态,我们可以使用show processlist;去查看。详细字段含义可自行百度。 
  2.  查询缓存。如果在缓存中匹配到完全相同的查询sql,则直接返回缓存中数据。可以使用show variables like '%query_cache%';查看查询缓存是否启用、缓存大小、限制等可以使用show status like 'Qcache%';查看更详细的缓存参数,可用缓存空间,缓存块。
  3. 解析器。分析sql,预处理。比如要检查sql语法、检查表是否存在、分析表明,表别名。然后生成解析树。
  4. 查询优化器。根据解析树生成最优执行计划。可以分为编译时优化和运行时优化。
  5. 查询执行引擎。负责执行sql,根据存储引擎,以及对应的api接口或者物理文件的交互,查到结果并返回给客户端。若开启缓存,则将sql语句和结果存入缓存。如果结果返回过多,则采取增量返回以减少压力。

大致流程图如下:

 

什么是半双工

数据通常是在两个站(点对点)之间进行传输,按照数据流的方向可分为三种传输模式:单工、半双工,全双工。

单工:只能发送或者只能接收。类似于马路的单行道。

半双工:同一时刻,只能发送或者只能接受。类似于以前的对讲机。

全双工:随时发送和接收。类似于打电话。

架构

 大致分为四层:网络连接层、服务层、存储引擎层、系统文件层。

网络连接层

mysql支持服务端主流的编程技术。本质仍是通过tcp协议建立连接。

服务层

线程池

MySQL是一个单进程多线程的应用,当用户通过Connetor向MySQL Server发起请求连接时,通过线程池(Connection Pool)建立一个用户连接,此连接会话将会一直存在。

sql接口

接受sql语句

解析器

进行sql解析,生成解析树

优化器

对解析树进行优化。分析衡量哪一种方法的开销,代价最小,开销的计算要依赖于索引的各种内部组件来进行评估,得到的是一个近似值,还要考虑到当前MySQL内部实现资源访问时的统计数据

缓存

如果开启缓存,则将查询sql和完整结果缓存。

查询时,如果缓存命中,则去缓存查找。

管理服务组件和工具组件

Backup & Recovery:备份恢复工具
Security:安全工具
Replication:复制工具
Cluster:集群服务
Administration Configuration:管理配置工具
Migration:迁移工具
Metadata:负责管理MySQL元数据的工具

存储引擎层

可拔插存储引擎。可以在创建表的时候指定存储引擎。

系统文件层

日志文件。错误日志、通用查询日志、二进制日志、慢查询日志

数据文件。

配置文件。mysql配置信息文件。

pid文件。unix或者Linux下放自己进程id。

socket文件。用unix socket连接mysql。

以上是对基础架构流程讲解,大家学习可以在此基础点上进行扩展,比如存储引擎如何去修改数据……可扩展点太多了,想要深入学习还需要一定时间和精力。

 

MySQL存储过程 DELIMITER的作用及用法

存储过程是一个代码段,在mysql执行过程中,遇到分号就执行了,怎么去改掉分号呢,让代码继续执行呢,下面讲讲MySQL存储过程 DELIMITER的作用及用法。

 1,MySQL存储过程 DELIMITER的作用

     改变执行语句的分号,可以改成 DELIMITER // 或者 DELIMITER $$

2, MySQL存储过程 DELIMITER的用法

  DELIMITER $$  //定义 &&
CREATE PROCEDURE GetAllProducts()

BEGIN
SELECT * FROM products;
END $$ //结束 $$
DELIMITER ; //改回原来

文章来自 www.huthon.cn

以上是关于浅析——mysql语句执行过程&&mysql架构的主要内容,如果未能解决你的问题,请参考以下文章

MySQL存储过程 DELIMITER的作用及用法

Day866.binlog&redoLog -MySQL实战

Day866.binlog&redoLog -MySQL实战

浅析mysql交互式连接&非交互式连接

delimiter关键字

Zero-Copy&sendfile浅析