浅析——mysql语句执行过程&&mysql架构
Posted 明天一定.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析——mysql语句执行过程&&mysql架构相关的知识,希望对你有一定的参考价值。
目录
语句执行过程
- 建立连接。通过客户端/服务器通讯协议建立连接,通信方式是半双工。建立的连接有一个线程监控状态,我们可以使用show processlist;去查看。详细字段含义可自行百度。
- 查询缓存。如果在缓存中匹配到完全相同的查询sql,则直接返回缓存中数据。可以使用show variables like '%query_cache%';查看查询缓存是否启用、缓存大小、限制等可以使用show status like 'Qcache%';查看更详细的缓存参数,可用缓存空间,缓存块。
- 解析器。分析sql,预处理。比如要检查sql语法、检查表是否存在、分析表明,表别名。然后生成解析树。
- 查询优化器。根据解析树生成最优执行计划。可以分为编译时优化和运行时优化。
- 查询执行引擎。负责执行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架构的主要内容,如果未能解决你的问题,请参考以下文章
Day866.binlog&redoLog -MySQL实战