MySQL 基本架构

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成为默认存储引擎;

发布了147 篇原创文章 · 获赞 170 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Fe_cow/article/details/102941168