mysql整体架构
MySQL 整体结构
一、整体架构概览
核心分层架构
层级 | 组件 | 核心功能 |
---|---|---|
Server层 | 连接器/查询缓存 | 连接管理、权限验证、SQL解析、优化、执行 |
分析器/优化器/执行器 | 内置函数、跨存储引擎功能(视图/存储过程/触发器) | |
存储引擎层 | InnoDB/MyISAM等 | 数据存储与检索,支持插件式架构(默认InnoDB) |
二、核心组件执行流程
1. 连接器
连接器(Connection)模块负责管理客户端与服务端之间的 TCP 连接
核心功能:
- 身份认证:验证用户名/密码
- 错误返回:
Access denied for user
- 错误返回:
- 权限管理:读取权限表,确定操作权限
- 连接管理:
- 空闲超时断开(
wait_timeout
控制,默认8小时) - 返回错误:
Lost connection to MySQL server during query
- 空闲超时断开(
-- 查看连接状态
SHOW PROCESSLIST;-- 查看超时设置
SHOW VARIABLES LIKE 'wait_timeout';
-- 详细一些的
SELECT * FROM information_schema.processlist;
2. 查询缓存(MySQL 5.7存在,8.0移除)
MySQL 在早期版本中提供了一个查询缓存机制,用于缓存查询结果,以提高重复查询的性能。
运作机制:
-
Key-Value结构:Key=SQL语句,Value=查询结果
-
参数控制:
SHOW VARIABLES LIKE 'query_cache%'; -- 查看缓存配置 SET GLOBAL query_cache_type = DEMAND; -- 按需使用模式
手动指定缓存:
SELECT SQL_CACHE * FROM user WHERE id=1;
移除原因:
- 缓存失效频繁:任何表更新都会使相关缓存失效
- 命中率低下:OLTP系统更新频繁
- 维护开销大:缓存管理消耗CPU资源
替代方案:应用层缓存(Redis/Memcached)或专用缓存数据库
3. 分析器
负责对 SQL 语句进行词法分析和语法分析,生成抽象语法树(AST)。
处理阶段:
- 词法分析
- 识别关键词:
SELECT
、FROM
、WHERE
- 提取对象:表名
user
、列名id
- 从
information_schema
获取元数据
- 识别关键词:
- 语法分析
- 验证SQL是否符合MySQL语法规则
- 错误示例:
ERROR 1064 (42000): You have an error...
4. 优化器
决定如何高效地执行查询,选择最优的执行计划。
核心决策:
-
索引选择策略(单表多索引场景)
-
多表关联顺序(JOIN重排优化)
-
示例优化场景:
SELECT * FROM t1 JOIN t2 USING(ID) WHERE t1.c=10 AND t2.d=20;
- 方案1:
t1(c=10) → t2(d=20)
- 方案2:
t2(d=20) → t1(c=10)
- 方案1:
5. 执行器
按照优化器生成的执行计划,实际执行查询操作并返回结果。
执行流程:
权限验证时机:
- 查询缓存命中:返回结果前验证
- 未命中:执行器阶段验证
- 触发器操作:运行时动态验证
三、存储引擎层
存储清清负责数据的实际存储和检索,定义了数据在磁盘上的组织形式及访问方式。
引擎 | 适用场景 | 特性 | 限制 |
---|---|---|---|
InnoDB | 事务处理 高并发写入 | ACID兼容 行级锁 外键支持 | 相对较高内存占用 |
MyISAM | 读密集型应用 数据仓库 | 高读取速度 全文索引 | 无事务支持 表级锁 |
Memory | 临时数据 高速缓存 | 内存存储 极快访问 | 数据易丢失 表大小受限 |
… |
生产建议:除非特殊需求,优先使用InnoDB