MySQL的体系结构是C S结构_(1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构、SQL查询流程)...

目录

1、学习笔记之mysql体系结构(C/S架构)

2、mysql整体架构

3、存储引擎

4、sql语句处理--SQL层(内存层)

5、服务器内存结构

6、mysql如何使用磁盘空间

7、mysql物理存储结构

8、mysql逻辑存储结构

学习笔记之mysql体系结构(C/S架构)

c83168f4e626aa0ef9a35a22a429a5a1.png

一、客户端

常用命令都在mysql data根目录下的bin目录;

(1)最大用户连接数

6ee3044bea4fe26b08d659f5815dd27d.png

一个连接数占512KB~64MB 内存

二、mysql整体架构(服务器进程架构)

6ceb256615df14260f3f0cdc29f5d079.png

简化如下图:

5fca72cb51e9955c4f154db165b9fb8e.png

1、连接层

f0b84adfe437adfd1e1c1f2ff1d3bf5a.png

(1)一个用户连接表示一个会话,一个会话要用一个线程来服从os的调度,要做上下文切换,创建销毁会话开销比较大。。所以Mysql这里搞了一个连接池,也就是thread-pool ,也就是再上面那张图的connectors Pool。

2、SQL层

通过该接口客户端连接发DML过来;

09510f1b024803cea3fa700b9fbd6ab7.png

它做语法语义等各种解析,如下图:

2dd8505e58d9de4f20f2bbcfd1170d59.png

然后优化,把解析后的数据生成mysql可以识别的数据,根据统计信息等等各种信息,优化其执行方式,生成执行计划;

b29663fe492bfdd9111665e62afe87a8.png

3、存储引擎

就是INNODB,详情可以参考上一篇文章。

4.sql语句处理--SQL层(内存层)

5a6c325fa1942c4a8eeb40debc82c0b1.png       

d9d60d4cdc30ac5ef6030a2ffb6bfabf.png

(1)检查告诉缓存查询;(查看查询缓存预设大小)

下面的query_cache_type目前是OFF,证明默认是关闭的,也就是没有启用查询缓存功能。

2f4479f5a65729140be810c632f11560.png

(2)解析查询

【1】硬解析:第一次执行  【2】软解析:如果以前有解析过同样的语句,这里就不再解析,直接拿以前的来用。

5、服务器内存结构

567cb905956bfb6ba9d3b15b8165fbb7.png

(1)连接/会话:这是每个线程私有的(相当于Oracle中的PGA),当内存不够的时候,才会用到临时表

913d0e6b9a0752ce4fd88014237d55b8.png

(2)服务器/共享:

【1】查询高速缓存:就是我们查询结果的结果集要缓存起来  【2】线程高速缓存:就是连接信息缓存

(3)存储引擎/共享:

【1】日志缓冲区:redo/undo等日志缓冲  【2】缓冲池:数据缓冲(如index page/data dictionary/insert buffer/hash page)

内存参数如下:

72e9817552f8bc1d5b4493261702ef1a.png

(1) 连接/会话

【1】join_buffer_size :表连接内存  【2】sort_buffer_size:表排序内存  【3】temp_table_size:内存不够用了,用临时表存储(磁盘),临时表大小

(2)服务器/共享

【1】query_cache:结果集缓存  【2】table_cache:打开每个表的信息缓存起来,以后要用每个表就不用每次都重新打开了

(3)存储引擎/共享

【1】innodb_buffer_pool_size:innoDB存储引擎缓冲池大小,应该占内存的50%~80%  【2】innodb_log_buffer_size:日志缓冲大小

6.mysql如何使用磁盘空间

999258470338f638535b37c14187b69a.png

(1)查看数据存放目录

show variables like '%datadir%';   #查看数据存放目录

show variables like '%log%'    #查看日志存放目录

39009e5eb835337ea675f8915f6f2442.png

7.mysql物理存储结构

e94663525df77d15e22719881a35b64c.png

(1)查看一下数据库

【1】查看数据目录  【2】退出mysql进入mysql数据目录  【3】找到数据库

26aedb6a1371ea344ec5d01a959f25e8.png

在Mysql里面验证一下;

f6a6cb8d5345d8efa42c42cdc2855101.png

发现我们看到的3个数据库都有,但多了一个Information_schema,因为该数据库是内存里的东西,所以在数据目录里看不到。

(2)创建一个数据库

create database jfedu default character set utf8;

87e35e2960e472c707add342d8999a7a.png

然后我们可以看到这里有我们新建数据库对应的文件了。

然后cd 进去看看有什么文件?文件内容是什么

1990692e1e65f88244276b753fecaf48.png

原来就一个文件,文件内容只是字符集和排序规则;

(3)建一个表

我们切换数据库上下文到新建的数据库jfedu,然后创建一个名为teacher的表;

7cbb364be1f3bd63b5d0860123d98ede.png

然后我们看看数据文件里面;

4bafe50146ca025d3e807f45a0b24ccb.png

因为这里默认存储引擎是innoDb,所以和我们以前写的MYISAM文件体系不一样,这里把MYD和MYI合并成了ibd文件。

b38980ade479ba95148f656c3e31bad1.png

8、mysql逻辑存储结构

25d6c86801128f8599a9d43daa64caf1.png

(1)1个实例对应一个数据库整体

1个实例对应的是一个基准数据库(注意这里说的是整体概念,而不是create database那种数据库),其实也可以理解成物理上对应一个mysql目录,指的是下图框出的这个:

3ebddef0f670dbcfa398d20ad79fe413.png

(2)1个实例对应多个逻辑数据库,1个逻辑数据库对应1个schema

这里的逻辑数据库说的是这个,应该可以理解;

87e35e2960e472c707add342d8999a7a.png

我们重点说一下逻辑数据库对应的schema,他们是1对1的关系。或者说完全是等价关系。(但在oracle中,schema是用户,在sql server中schema是一个逻辑分组架构。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值