Skip to content

产品与运行架构

MySQL Server 通过协议接收客户端请求,完成认证、解析、优化和执行,再通过存储引擎接口访问表。SQL 能否执行、如何访问数据和事务能否回滚,分别由不同层共同决定。


主要层次

层次职责
Connector协议、TLS、认证插件、连接参数和结果映射
Connection/Thread建立会话、保存 Session 状态并执行请求
Parser/Resolver检查语法、对象名、权限和表达式语义
Optimizer根据统计信息和成本选择连接顺序、索引与执行策略
Executor驱动执行计划并调用存储引擎接口
Storage Engine实现数据页、索引、锁、事务和具体 I/O
Binary Log在 Server Layer 记录逻辑或行变化,用于复制和 PITR

MySQL 8.x 已使用事务型数据字典,不再以旧版 .frm 文件作为表定义来源。旧教程中直接复制 .frm.ibd 拼装表结构的恢复方式不适用于现代版本。


SQL 执行路径

text
接收 SQL
→ 解析并绑定对象
→ 读取权限与元数据
→ 生成候选访问路径
→ 根据统计和成本选择计划
→ 存储引擎访问索引或数据页
→ 排序、聚合、连接并返回结果

逻辑书写顺序与概念处理顺序不同:

text
FROM / JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

这是理解别名可见范围和聚合语义的工具,不是优化器必须严格按该顺序物理执行的承诺。


连接与内存

MySQL 常见一个客户端连接对应一个服务线程或线程池执行单元。每个连接除了固定会话内存,还可能按执行节点申请 Sort、Join、Read Buffer 和临时表空间。

因此总内存不能只看 InnoDB Buffer Pool:

text
实例内存 ≈ 全局缓存 + 活跃连接私有内存 + 临时操作 + Performance Schema + 系统开销

max_connections 提高并不会提升数据库处理能力,只会允许更多请求同时争用 CPU、内存、锁和 I/O。应用通常应使用有上限的连接池并设置连接、查询和事务超时。


存储引擎选择

引擎定位新业务判断
InnoDBACID、MVCC、行锁、外键和崩溃恢复通用业务默认选择
MyISAM非事务、表级锁的遗留引擎不因“查询快”而选用,通常只维护遗留系统
MEMORY数据驻留内存,重启丢失只适合可重建临时数据,不能替代缓存服务
NDBMySQL Cluster 的分布式存储引擎独立产品架构,不能按普通 InnoDB 使用

MyISAM 并不天然比 InnoDB 查询快。真实性能取决于缓存、索引、并发、数据可靠性要求和工作负载;缺少事务与崩溃恢复通常使它不适合现代核心系统。

参考资料