概述
MySQL 基本架构:
从图中可以看出,分为服务器层、跟存储引擎层两部分:
一、服务器层:
连接器:
- 管理连接、权限验证
连接器负责跟客户端建立连接,获取权限,维持,管理连接:
mysql -h$ip -p$port -u$user -p
在命令中mysql是客户端工具,用来跟服务器端建立连接,在完成经典的TCP握手后,连接器就开始认证身份
,输入用户、密码进行登录:
查看连接状态:
show processlist
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+----------+------------------+
| 3 | root | localhost:57819 | NULL | Sleep | 0 | starting | show processlist |
+----+------+-----------------+------+---------+------+----------+------------------+
“Sleep” 就表示系统里有空闲连接
建立长连接时,MySQL内存涨的特别快,如何解决?
- 定期断开长连接,使用一段时间,或者程序里面判断执行过一个占用内存大的查询后,断开连接,之后再查询再重连;
- 如果使用MySQL-5.7版本以上,在每次执行一个较大操作后,通过执行
mysql_reset_connection
来重新初始化连接资源。这个过程不需要重连和重新验证;
查询缓存:
- 命中直接返回结果
MySQL获取一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。
执行语句,结果,会以Key-Value对 形式,直接缓存在内存中:
-
Key:查询语句
-
Value:查询结果
若查询直接在缓存中找到Key,那么Value就被直接返回给客户端;
不建议使用查询缓存:
只要对一个表更新,那么表上所有查询缓存都会被清空
。除非使用一张静态表,很长时间才会更新。
配置参数query_cache_type设置成DEMAND,这样默认的SQL语句都不使用查询缓存:
查询是否开启查询缓存:
mysql> SELECT @@query_cache_type;
+--------------------+
| @@query_cache_type |
+--------------------+
| OFF |
+--------------------+
1 row in set, 1 warning (0.01 sec)
query_cache_type 有3个值:
0:表示关闭查询缓存(OFF)
1:表示开启查询缓存(ON)
2:代表当sql语句中有SQL_CACHE关键词才缓存,如下
select SQL_CACHE * from Table where ID=10;
MySQL 8.0版本开始,删除查询缓存整块功能;
分析器:
- 执行计划生产、索引选择
分析器先会做词法分析:
-
由多个字符、空格组成字符串,要识别出里面字符串分别是什么?代表什么?
“SELECT” 这个关键字识别,这是一个查询语句
在做语法分析:
-
根据语法规则,判断输入的SQL语句是否满足MySQL语法:
语法不对,You have an error in your SQL syntax 错误提醒
优化器:
- 执行计划生产、索引选择
优化器,在表里面有多个索引,决定使用哪个索引,或者一个语句有多表关联时,决定各个表连接顺序。作用就是决定选择使用哪一个方案,并用最小的代价去执行语句
。
执行器:
- 操作引擎、返回结果
select * from T where ID=10;
1.开始执行时,需要判断你对这个表T是否有执行查询权限;
- 如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证
2.如果有权限,打开表继续执行,执行器会根据表的引擎定义,去使用这个引擎提供接口;
3.调用引擎接口,取"一下行",重复相同的判断逻辑,直到取到这个表的最后一行;
5.执行器将上述遍历过程中,所有满足条件的行组成记录集,作为结果集返回给客户端;
内置函数(日期、时间),存储过程,触发器,视图等,都是再服务层实现;
二、存储引擎层:
存储引擎:
- 存储数据,提供读写接口
支持InnoDB,MyISAM、Memory(内存型存储引擎)等,从MySQL-5.5.5版本开始InnoDB成为默认存储引擎;
最后
以上就是无私小懒虫为你收集整理的MySQL 基本架构MySQL 基本架构:的全部内容,希望文章能够帮你解决MySQL 基本架构MySQL 基本架构:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复