(1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构、SQL查询流程)
1. 学习笔记之mysql体系结构(C/S架构)
1.1 客户端
常用命令都在mysql data根目录下的bin目录;
(1)最大用户连接数
一个连接数占512KB~64MB 内存
2. mysql整体架构(服务器进程架构)
简化如下图:
2.1 连接层
(1)一个用户连接表示一个会话,一个会话要用一个线程来服从os的调度,要做上下文切换,创建销毁会话开销比较大。。所以Mysql这里搞了一个连接池,也就是thread-pool ,也就是再上面那张图的connectors Pool。
2.2 SQL层
通过该接口客户端连接发DML过来;
它做语法语义等各种解析,如下图:
然后优化,把解析后的数据生成mysql可以识别的数据,根据统计信息等等各种信息,优化其执行方式,生成执行计划;
2.3 存储引擎
就是INNODB,详情可以参考上一篇文章。
2.4 sql语句处理--SQL层(内存层)
(1)检查告诉缓存查询;(查看查询缓存预设大小)
下面的query_cache_type目前是OFF,证明默认是关闭的,也就是没有启用查询缓存功能。
(2)解析查询
【1】硬解析:第一次执行 【2】软解析:如果以前有解析过同样的语句,这里就不再解析,直接拿以前的来用。
2.5 服务器内存结构
(1)连接/会话:这是每个线程私有的(相当于Oracle中的PGA),当内存不够的时候,才会用到临时表
(2)服务器/共享:
【1】查询高速缓存:就是我们查询结果的结果集要缓存起来 【2】线程高速缓存:就是连接信息缓存
(3)存储引擎/共享:
【1】日志缓冲区:redo/undo等日志缓冲 【2】缓冲池:数据缓冲(如index page/data dictionary/insert buffer/hash page)
2.6 内存参数
(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:日志缓冲大小
2.7 mysql如何使用磁盘空间
(1)查看数据存放目录
show variables like '%datadir%'; #查看数据存放目录
show variables like '%log%' #查看日志存放目录
2.8 mysql物理存储结构
(1)查看一下数据库
【1】查看数据目录 【2】退出mysql进入mysql数据目录 【3】找到数据库
在Mysql里面验证一下;
发现我们看到的3个数据库都有,但多了一个Information_schema,因为该数据库是内存里的东西,所以在数据目录里看不到。
(2)创建一个数据库
create database jfedu default character set utf8;
然后我们可以看到这里有我们新建数据库对应的文件了。
然后cd 进去看看有什么文件?文件内容是什么
原来就一个文件,文件内容只是字符集和排序规则;
(3)建一个表
我们切换数据库上下文到新建的数据库jfedu,然后创建一个名为teacher的表;
然后我们看看数据文件里面;
因为这里默认存储引擎是innoDb,所以和我们以前写的MYISAM文件体系不一样,这里把MYD和MYI合并成了ibd文件。
2.9 mysql逻辑存储结构
(1)1个实例对应一个数据库整体
1个实例对应的是一个基准数据库(注意这里说的是整体概念,而不是create database那种数据库),其实也可以理解成物理上对应一个mysql目录,指的是下图框出的这个:
(2)1个实例对应多个逻辑数据库,1个逻辑数据库对应1个schema
这里的逻辑数据库说的是这个,应该可以理解;
我们重点说一下逻辑数据库对应的schema,他们是1对1的关系。或者说完全是等价关系。(但在oracle中,schema是用户,在sql server中schema是一个逻辑分组架构。)
相关文章
- mysql索引总结(3)-MySQL聚簇索引和非聚簇索引
- 【MySQL高级】应用优化及Mysql中查询缓存优化以及Mysql内存管理及优化
- Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2)
- MySQL使用初步—mysql数据库的基本命令
- MySQL 联级删除(on delete cascade)应用
- Java项目(前端vue后台java微服务)在线考试系统(java+vue+springboot+mysql+maven)
- 【MySQL进阶-10】mysql语句的执行流程以及集群的高可用
- MySQL root修改普通用户密码及Mysql 修改root密码
- MySQL索引
- 六、Mysql - 用户管理 - 权限(二)
- mac ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- MySQL生产环境下的主从复制启动项
- python操作mysql数据库系列-安装MySql
- idea 社区版连接mysql数据库教程,Cannot connect to “MySQL-5.1.43“. CLIENT_PLUGIN_AUTH is required
- liunux mysql MySQL表名不区分大小写的设置方法
- Amoeba for MySQL 非常好用的mysql集群软件
- 快速提升MySQL可扩展性的五大绝招
- 【MySQL】mysql更换root密码,全网唯一有用!
- mysql窗口函数、Mysql分析函数
- mac上配置mysql与redis server,并结合Pydev准备某爬虫环境
- MySQL性能优化的21个最佳实践 和 mysql使用索引
- MySQL基本SQL语句4(DCL)