DevOps开发运维
成长之路

mysql体系结构工作原理

C/S(客户端/服务端)模型介绍

C/S结构就是客户端client/sever一种模式,例如ssh服务,mysql命令就是MySQL提供的客户端程序。B/S结构就是不需要客户端,
一个ie就可以访问,例如nginx服务器。
mysql的C/S模型包括下面两种 :

TCP/IP方式(远程、本地)连接串模式:

mysql -uroot -poldboy123 -h 10.0.0.51 -P3306

Socket方式(仅本地):

mysql -uroot -poldboy123 -S /tmp/mysql.sock 相当于mysql -uroot -poldboy123

mysql服务进程是通过bin目录下的mysqld程序启动的。

实例介绍

真正干活的称为mysql实例

实例=mysqld后台守护进程+Master Thread +干活的Thread+预分配的内存
公司=老板(启动的进程)+经理(主线程)+员工(其他线程)+办公室

mysqld程序结构

sql语句即mysql专用的命令,相当于linux里面的shell,mysql中大部分都是用sql语句进行管理使用,对于数据库
影响最大的就是sql语句的执行,所以必须对SQL语句执行过程进行了解,才能把控SQL语句对系统的影响,以便于处理
出现的各种问题。

一条SQL语句的执行过程

即研究从敲下回车输入SQL语句到返回结果的过程中发生了什么?

连接层

(1)提供连接协议:TCP/IP 、SOCKET
(2)提供验证:用户、密码,IP,SOCKET
(3)提供专用连接线程:接收用户SQL语句,返回结果,不负责中间SQL运行
查看连接线程基本情况,每一个连接都会提供一个线程,3306 [(none)]>show processlist;如下图:

SQL层

专门负责SQL语句的执行,接收上层传达的SQL语句,主要是和MySQL优化和性能相关。

1.接收上层传送的SQL语句
2.语法验证模块:验证语句语法,是否满足SQL_MODE(SQL_MODE是sql语句运行规范)
3.语义检查:判断SQL语句的类型
DDL :数据定义语言
DCL :数据控制语言
DML :数据操作语言
DQL: 数据查询语言
...以上为常用SQL语句命令类型,大致包括对库,表,用户,权限等SQL语句命令
4.权限检查:用户对库表有没有权限
5.解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案.
6.优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划,最早期是根据算法模型,
选出运行最快的执行计划,现在是基于代价模型。代价模型:资源(CPU IO MEM)的耗损评估性能好坏。
优化器可以按照优化器固有的算法进行人为的干预,mysql优化根据优化器的算法为基准进行优化,
更加接近最优的算法,会选择资源损耗最小的那个执行方案。
7.执行器:根据最优执行计划,执行SQL语句,产生执行结果。执行器执行完成以后,执行结果
出现在磁盘上,即交给存储引擎层
8.提供查询缓存(默认是没开启的),会使用redis、tair(淘宝在用的)替代查询缓存功能,
重复的mysql劳动会通过替代查询缓存提高性能。
9.提供日志记录(日志管理章节):binlog,默认是没开启的。

存储引擎层(类似于Linux中的文件系统)

插件式的存储引擎,负责根据SQL层执行的结果,从磁盘上拿数据。将16进制的磁盘数据,交由SQL层结构化成表,连接层的专用线程
返回给用户。与安全角度相关。
赞(2)

评论 抢沙发

评论前必须登录!

 

LNMP社群 不仅仅是技术

关于我们网站地图