MySQL 内核总体架构,这样你能从整体上把握它的运行机制。MySQL 内核可以分为 Server 层 和 存储引擎层 两大部分:
MySQL 内核就是 Server 层(SQL 处理) + 存储引擎层(数据存储与事务) 的组合。
- Server 层像一个 大脑(解析+优化+调度)
- 存储引擎层像 手脚(读写磁盘+事务保证)
一、总体架构分层
+-------------------------+
| 应用 (JDBC、ORM等) |
+-------------------------+
| Server 层 | ← SQL 解析、优化、缓存、权限
+-------------------------+
| 存储引擎层 (插件) | ← InnoDB、MyISAM、RocksDB...
+-------------------------+
| 系统文件/磁盘 |
+-------------------------+
二、Server 层
这一层主要负责 SQL 相关的通用功能,不管底层用哪个存储引擎,都经过这里。
-
连接管理(Connection Layer)
- 处理客户端连接,用户认证(用户名/密码/SSL),权限验证。
- 一个连接对应一个线程(MySQL 8.0 已支持 Thread Pool 来优化)。
-
查询缓存(Query Cache, 已在 8.0 移除)
- 以前用来缓存查询结果,但更新表时会失效,命中率低,所以被废弃。
-
解析器(Parser)
- 将 SQL 转换成语法树(AST)。
- 包含 词法分析、语法分析。
-
优化器(Optimizer)
-
负责生成执行计划(Execution Plan)。
-
常见优化:
- 选择合适的索引
- JOIN 顺序优化
- 子查询优化
- 统计信息估算(代价模型)
-
-
执行器(Executor)
- 根据优化器生成的执行计划,调用对应存储引擎接口(Handler API)。
- 如:
handler->read_next()读取数据行。
三、存储引擎层(可插拔)
存储引擎决定了数据如何存储和读写。常见的:
-
InnoDB(默认)
- 支持事务(ACID),行锁,MVCC。
- B+Tree 索引,Buffer Pool 缓存。
- 支持崩溃恢复。
-
MyISAM
- 不支持事务,表级锁,适合读多写少。
- 压缩表,占用空间小。
-
Memory
- 数据存放在内存,重启丢失,适合临时表、缓存。
-
其它插件
- NDB(分布式),RocksDB(LSM 树),TokuDB 等。
四、存储子系统(以 InnoDB 为例)
InnoDB 内核比较复杂,可以分为几个关键模块:
-
Buffer Pool
- 数据页缓存区,避免频繁 IO。
- 使用 LRU 算法管理。
-
Redo Log(重做日志)
- 记录事务对数据的修改(物理日志)。
- 用于 崩溃恢复。
-
Undo Log(回滚日志)
- 记录数据修改前的版本。
- 用于 事务回滚 和 MVCC 多版本并发控制。
-
Doublewrite Buffer
- 写入数据页时,先写到 doublewrite,再刷盘,防止页写一半时崩溃。
-
锁管理
- 行锁、间隙锁、next-key 锁。
- 避免幻读、保证事务隔离性。
-
数据组织
- 表 → 表空间(tablespace)
- 数据存储在 B+Tree 页(16KB 默认页大小)
五、整体执行流程
以 SELECT * FROM user WHERE id = 1; 为例:
-
连接器:用户建立连接,认证。
-
解析器:解析 SQL,生成语法树。
-
优化器:确定走主键索引。
-
执行器:调用 InnoDB 引擎 API。
-
InnoDB:
- 查 Buffer Pool → 命中则返回;
- 否则读磁盘页 → 放入 Buffer Pool。
-
返回结果给客户端。
10万+

被折叠的 条评论
为什么被折叠?



