MySQL Architecture

MySQL 版本历史与主要特性:https://www.orczhou.com/index.php/2023/05/mysql-version-history

整体架构

Client:与编程语言相关,在 TCP 连接上通过 MySQL 协议和 Server 交互

Server

  • 连接层:TCP 池和 Thread 池,处理来自客户端的连接,如用户名密码校验、权限校验等
  • 服务层:解析与优化
    • SQL Interface:SQL 接口。接收 SQL 命令,返回查询结果
    • Parser:解析器。验证和解析 SQL,生成语法树
    • Optimizer:查询优化器。查询前对 SQL 进行优化,生成执行计划
      • 选取:根据 where 条件进行选取,不是将表全部查出再过滤
      • 投影:根据要查询的字段进行属性投影,不是将全部字段查出再过滤
      • 连接:将选取和投影连接,生成最终查询结果
    • Cache 和 Buffer:缓存。由一系列小缓存组成,如表(查询)缓存(show variables like '%query_cache_type%')、记录缓存、key 缓存、权限缓存等
  • 存储引擎层:show engines,存储引擎真正负责了 MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信,不同存储引擎支持的索引类型不同
    • InnoDB:事务、外键、行锁(适合高并发)、frm 存表结构(8.0 合并到 ibd 中了),ibd 存数据和索引(ibd2sdi),opt 存库信息(8.0 合并到 ibd 中了)
    • MyISAM:不支持事务(访问速度快)和外键、表锁、记录了表数据量、frm 存表结构(8.0 为 sdi),myd 存数据,myi 存索引
    • Archive:用于数据存档
    • CSV:以 csv 文件作为数据库
    • Memory:数据存储在内存中,支持哈希索引(等或不等)和B+索引(范围)
  • 文件系统:show variables like '%datadir%',主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互
    • 本地磁盘
    • 内存

SQL 执行流程

  1. 查询缓存(5.7 可以开启,8.0 没有)
  2. 解析器(词法分析、语法解析、语义检查,生成解析树(abstract syntax tree))
  3. 查询优化器(逻辑优化(SQL 等价变换)、物理优化(索引、表连接方式)。生成执行计划)
  4. 执行器(查询执行引擎,调用存储引擎 API)

手写:select > distinct > from > join > on > where > group by > having > order by > limit

机读:from > on > join > where > group by > having > select > distinct > order by > limit

数据库引擎

-- 查看所有的数据库引擎
show engines;
-- 查看默认的数据库引擎
show variables like '%storage_engine%';

系统数据库简介

mysql:存储了 MySQL 的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。

information_schema:保存着 MySQL 服务器维护的所有其它数据库的信息,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引等等。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称之为元数据。

performance_schema:主要保存 MySQL 服务器运行过程中的一些状态信息,算是对 MySQL 服务器的一个性能监控。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等等信息。

sys:主要是通过视图的形式把 information_schema 和 performance_schema 结合起来,可以更方便的了解 MySQL 服务器的一些性能信息。

 


https://dev.mysql.com/doc/refman/8.2/en/pluggable-storage-overview.html

http://mysql.taobao.org

posted @ 2020-07-21 10:48  江湖小小白  阅读(233)  评论(0编辑  收藏  举报