文章目录
- 1. 逻辑架构剖析
- 1.1 服务器处理客户端请求
- 1.2 Connectors
- 1.3 第1层:连接层
- 1.4 第2层:服务层
- 1.5 第3层:引擎层
- 1.6 存储层
- 1.7 小结
- 2. SQL执行流程
- 2.1 MySQL 中的 SQL执行流程
- 2.2 MySQL8中SQL执行原理
- 2.3 MySQL5.7中SQL执行原理
- 2.4 SQL语法顺序
- 3. 数据库缓冲池(buffer pool)
- 3.1 缓冲池 vs 查询缓存
- 3.2 缓冲池如何读取数据
- 3.3 查看/设置缓冲池的大小
- 3.4 多个Buffer Pool实例
- 3.5 引申问题
1. 逻辑架构剖析
1.1 服务器处理客户端请求
- 首先 MySQL 是典型的 C/S 架构,即
Client/Server 架构
,服务器端程序使用的mysqld
。 - 不论客户端进程和服务器进程是采用那种方式进行通信,最后实现的效果都是:
客户端进程向服务器进程发送一段文本(SQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)
1.2 Connectors
- Connectors,指的是不同语言中与SQL的交互。MySQL首先是一个网络程序,在TCP至上定义了自己的应用层协议。所以要使用MySQL,我们可以编写代码,根MySQL Server
建立TCP连接
,之后按照其定义好的协议进行交互。或者比较方便的方法是调用SDK,比如Native C API、JDBC、PHP等各语言 MySQL Connector,或者通过ODBC。但通过SDK来访问MySQL,本质上还是在TCP连接上通过MySQL协议跟MySQl进行交互
接下来的 MySQL Server
结构可分为如下的三层:`
1.3 第1层:连接层
1.4 第2层:服务层
1.5 第3层:引擎层
1.6 存储层
所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在 文件系统
上,以 文件
的方式存在的,并完成与存储引擎的交互。当然有些存储引擎比如InnoDB,也支持不使用文件系统直接管理裸设备,但现代文件系统的实现使得这样做没有必要了。在文件系统之下,可以使用本地磁盘,可以使用DAS、NAS、SAN等各种存储系统。
1.7 小结
2. SQL执行流程
2.1 MySQL 中的 SQL执行流程
MySQL的查询流程:
经过解析器,MySQL就知道你要做什么了。在开始执行之前,还要经过优化器处理。一条查询可以有很多种执行方式,最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划
2.2 MySQL8中SQL执行原理
- 确认profiling 是否开启
mysql> select @@profiling;
mysql> show variables like 'profiling';
-
多次执行相同SQL查询
-
查看profiles
查看当前会话所产生的所有 profiles:
mysql> show profiles; # 显示最近的几次查询
- 查看profile
2.3 MySQL5.7中SQL执行原理
结论不言而喻。执行编号2时,比执行编号1时少了很多信息,从截图中可以看出查询语句直接从缓存中获取数据。
2.4 SQL语法顺序
3. 数据库缓冲池(buffer pool)
3.1 缓冲池 vs 查询缓存
缓冲池和查询缓存是一个东西吗?不是。
3.2 缓冲池如何读取数据
3.3 查看/设置缓冲池的大小
3.4 多个Buffer Pool实例
3.5 引申问题
答案:Redo Log & Undo Log