数据库内核

数据库架构

一、总体流程

客户端发来 SQL → Parser(解析) → 看 Query Result Cache(结果缓存)(若命中直接返回)
否则继续 → Resolver(语义解析/名称解析) → 看 Plan Cache(计划缓存)(若命中直接取计划)
否则 → Transformer(重写/规范化)Optimizer(优化器,选物理计划)Code Generator(生成可执行计划或代码)Executor(执行器) 执行并通过 Buffer Pool(缓冲池)/存储管理器 访问磁盘数据,整个执行受 事务管理器日志与恢复并发控制(锁/MVCC) 协调和约束。

图上“命中”(命中)分别标注在 Query Result Cache 与 Plan Cache — 命中时能大幅跳过后续环节,提升响应速度。


二、前端:解析、解析后缓存与计划缓存

1. Parser(解析器)

  • 职责:把 SQL 文本转换成语法树(AST / parse tree)。
  • 产物:AST(或 parse tree),供 resolver 使用。

2. Query Result Cache(查询结果缓存)

  • 职责:缓存完整的查询结果。
  • 命中(hit):直接返回缓存结果,跳过后续流程。
  • 失效:对相关表的数据写入或DDL会使缓存失效。

3. Resolver(解析/语义分析器)

  • 职责:做名称解析、类型检查、权限检查等。
  • 与 Plan Cache 的关系:以解析后语义树为 key。

4. Plan Cache(计划缓存)

  • 职责:缓存优化后(或 codegen 后)的物理执行计划。
  • 命中:跳过优化阶段直接执行。
  • 失效:schema/统计信息变化等会使计划失效。

三、中间阶段:Transformer、Optimizer、Code Generator、Executor

5. Transformer(重写器)

  • 对解析树进行语义和代数重写,如谓词下推、子查询改写为 join、常量折叠等。

6. Optimizer(查询优化器)

  • 选择最优执行计划。
  • 使用统计信息进行代价估计,选择连接顺序与索引。
  • 输出物理执行树。

7. Code Generator(代码生成)

  • 把执行树转成可执行形式(解释执行树、向量化或JIT编译)。

8. Executor(执行器)

  • 执行查询计划,通过 Buffer Pool 获取数据。
  • 负责数据访问、表达式计算、结果输出。
  • 遵守事务管理与并发控制。

四、存储与内存层

9. Catalog(系统目录)

  • 保存表、列、索引、统计信息、权限等元数据。

10. Buffer Pool(缓冲池)

  • 把磁盘页缓存到内存。
  • 使用替换策略(LRU/Clock)与脏页写回机制。
  • 保证WAL先写后刷(write-ahead logging)。

11. 存储管理器(Storage Manager)

  • 管理物理文件/块、表空间、extent分配等。
  • 负责I/O调度、预读、异步I/O等。

五、日志、恢复与事务管理

12. 事务管理器(Transaction Manager)

  • 管理事务生命周期(begin/commit/abort)。
  • 分配事务id/snapshot。
  • 协调日志与并发控制模块。

13. 日志与恢复(WAL / Log & Recovery)

  • 使用 WAL(Write-Ahead Logging) 保证持久性。
  • 检查点(checkpoint) 减少恢复时间。
  • 恢复流程:分析→重做→回滚(ARIES)。

六、并发控制(锁与MVCC)

14. 并发控制(Concurrency Control)

  • 保证并发事务间一致性与隔离性。
  • 锁机制(2PL)MVCC(多版本并发控制) 并行使用。

15. Latch vs Lock

  • Latch:短期内存结构互斥锁(页保护)。
  • Lock:事务级逻辑锁,保证隔离性。

七、缓存命中与失效

缓存类型 命中效果 失效条件
Query Result Cache 直接返回结果 数据更新或DDL
Plan Cache 跳过优化阶段 schema/统计信息变化

  • Copyrights © 2023-2026 Hexo

请我喝杯咖啡吧~

支付宝
微信