MySQL 内核总体架构

MySQL 内核总体架构,这样你能从整体上把握它的运行机制。MySQL 内核可以分为 Server 层存储引擎层 两大部分:
MySQL 内核就是 Server 层(SQL 处理) + 存储引擎层(数据存储与事务) 的组合。

  • Server 层像一个 大脑(解析+优化+调度)
  • 存储引擎层像 手脚(读写磁盘+事务保证)

一、总体架构分层

+-------------------------+
|   应用 (JDBC、ORM等)     |
+-------------------------+
|       Server 层         |  ← SQL 解析、优化、缓存、权限
+-------------------------+
|    存储引擎层 (插件)     |  ← InnoDB、MyISAM、RocksDB...
+-------------------------+
|      系统文件/磁盘       |
+-------------------------+

二、Server 层

这一层主要负责 SQL 相关的通用功能,不管底层用哪个存储引擎,都经过这里。

  1. 连接管理(Connection Layer)

    • 处理客户端连接,用户认证(用户名/密码/SSL),权限验证。
    • 一个连接对应一个线程(MySQL 8.0 已支持 Thread Pool 来优化)。
  2. 查询缓存(Query Cache, 已在 8.0 移除)

    • 以前用来缓存查询结果,但更新表时会失效,命中率低,所以被废弃。
  3. 解析器(Parser)

    • 将 SQL 转换成语法树(AST)。
    • 包含 词法分析语法分析
  4. 优化器(Optimizer)

    • 负责生成执行计划(Execution Plan)。

    • 常见优化:

      • 选择合适的索引
      • JOIN 顺序优化
      • 子查询优化
      • 统计信息估算(代价模型)
  5. 执行器(Executor)

    • 根据优化器生成的执行计划,调用对应存储引擎接口(Handler API)。
    • 如:handler->read_next() 读取数据行。

三、存储引擎层(可插拔)

存储引擎决定了数据如何存储和读写。常见的:

  1. InnoDB(默认)

    • 支持事务(ACID),行锁,MVCC。
    • B+Tree 索引,Buffer Pool 缓存。
    • 支持崩溃恢复。
  2. MyISAM

    • 不支持事务,表级锁,适合读多写少。
    • 压缩表,占用空间小。
  3. Memory

    • 数据存放在内存,重启丢失,适合临时表、缓存。
  4. 其它插件

    • NDB(分布式),RocksDB(LSM 树),TokuDB 等。

四、存储子系统(以 InnoDB 为例)

InnoDB 内核比较复杂,可以分为几个关键模块:

  1. Buffer Pool

    • 数据页缓存区,避免频繁 IO。
    • 使用 LRU 算法管理。
  2. Redo Log(重做日志)

    • 记录事务对数据的修改(物理日志)。
    • 用于 崩溃恢复
  3. Undo Log(回滚日志)

    • 记录数据修改前的版本。
    • 用于 事务回滚MVCC 多版本并发控制
  4. Doublewrite Buffer

    • 写入数据页时,先写到 doublewrite,再刷盘,防止页写一半时崩溃。
  5. 锁管理

    • 行锁、间隙锁、next-key 锁。
    • 避免幻读、保证事务隔离性。
  6. 数据组织

    • 表 → 表空间(tablespace)
    • 数据存储在 B+Tree 页(16KB 默认页大小)

五、整体执行流程

SELECT * FROM user WHERE id = 1; 为例:

  1. 连接器:用户建立连接,认证。

  2. 解析器:解析 SQL,生成语法树。

  3. 优化器:确定走主键索引。

  4. 执行器:调用 InnoDB 引擎 API。

  5. InnoDB:

    • 查 Buffer Pool → 命中则返回;
    • 否则读磁盘页 → 放入 Buffer Pool。
  6. 返回结果给客户端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值