【赵渝强老师】MySQL的体系架构

2024-08-12 15:11:04 浏览数 (1)

  对于MySQL来说,虽然经历了多个版本迭代,并且也存在不同的分支。但是MySQL数据库的基础架构基本都是一致的。下图展示了MySQL的体系架构。

  视频讲解如下:

视频内容

一、MySQL Server层

  MySQL的Server层主要有以下7个组件:MySQL向外提供的交互接口(Connectors)、连接池组件(Connection Pool)、管理服务组件和工具组件(Management Service & Utilities)、SQL接口组件(SQL Interface)、查询分析器组件(Parser)、优化器组件(Optimizer)和缓存主件(Query Caches & Buffers)。

  下面分别介绍这7个组件的作用。

  • MySQL向外提供的交互接口(Connectors)   Connectors组件是MySQL向外提供的交互组件,如java,.net,php等语言可以通过该组件来操作SQL语句,实现与SQL的交互。建立连接之后,我们可以通过“show processlist”语句来查看已经建立的连接,如下图所示。
  • 连接池组件(Connection Pool)   负责监听对客户端向MySQL Server端的各种请求,接收请求,转发请求到目标模块。每个成功连接MySQL Server的客户请求都会被创建或分配一个线程,该线程负责客户端与MySQL Server端的通信,接收客户端发送的命令,传递服务端的结果信息等。
  • 管理服务组件和工具组件(Management Service & Utilities)   提供对MySQL的集成管理,如备份(Backup),恢复(Recovery),安全管理(Security)等。
  • SQL接口组件(SQL Interface)   接收用户SQL命令,如DML,DDL和存储过程等,并将最终结果返回给用户。
  • 查询分析器组件(Parser)   系统在真正执行输入的语句之前,必须分析出语句想要干嘛?例如:首先通过select关键字得知这是一条查询命令,还包括分析要查询的是哪张表以及查询条件是什么?同时,分析器必须分析输入语句的语法正确性。如果SQL中存在语法的错误,则查询分析器组件将返回下面的信息:“You have an error in your SQL syntax”.
  • 优化器组件(Optimizer)   优化器是MySQL用来对输入的语句在真正执行之前所做的最后一步优化。优化内容包括:是否选择索引?选择哪个索引?多表查询的联合顺序等等。 每一种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。
  • 缓存主件(Query Caches & Buffers)   这个查询缓存比较好理解。在每一次的查询时,MySQL都先去看看是否命中缓存,命中则直接返回,提高了系统的响应速度。但是这个功能有一个相当大的弊病,那就是一旦这个表中数据发生更改,那么这张表对应的所有缓存都会失效。   对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非业务系统就是有一张静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。所以在生产系统中,建议关闭该功能。   在MySQL 8.0 版本之前,我们可以通过将参数“query_cache_type”设置成 OFF,来关闭查询缓存的功能。但是在MySQL8.0版本之后,直接删掉了这部分的功能。
代码语言:sql复制
# 执行下面的语句:
mysql> show variables like '%query_cache%';

# 输出的信息如下:
 ------------------ ------- 
| Variable_name    | Value |
 ------------------ ------- 
| have_query_cache | NO    |
 ------------------ ------- 

# 如果在MySQL 8以前的版本中,输出的信息如下:
 ------------------------------ --------- 
| Variable_name                | Value   |
 ------------------------------ --------- 
| have_query_cache             | YES     |
| query_cache_limit            | 1048576 |
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 1048576 |
| query_cache_type             | OFF     |
| query_cache_wlock_invalidate | OFF     |
 ------------------------------ ---------  

二、MySQL的存储引擎

  MySQL的存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。

  通过“show create table”可以看出创建表时使用的存储引擎。例如下图中的test1表使用的就是InnoDB的存储引擎。

0 人点赞