⚠️ 说明:不同数据库的具体实现架构不同,下图与流程展示的是数据库系统中常见的通用设计思想
Step 1:传输层(Transport Layer)
客户端通过传输层协议(如 TCP)向数据库发送 SQL 语句
负责:
- 网络通信
- 请求数据的接收与响应返回
Step 2:命令解析器(Command Parser)
接收 SQL 语句并进行:
- 语法分析(Syntax Analysis)
- 语义分析(Semantic Analysis)
分析完成后,生成 查询树(Query Tree)
- 查询树是 SQL 语句的结构化表示
Step 3:优化器(Optimizer)
接收查询树
根据统计信息和代价模型进行优化
生成 执行计划(Execution Plan)
决定:
- 使用哪个索引
- 表的访问顺序
- 连接方式(如 Nested Loop、Hash Join 等)
Step 4:执行器(Executor)
- 接收执行计划
- 按照执行计划逐步执行 SQL
- 不直接访问磁盘,而是通过下层模块获取数据
Step 5:访问方法(Access Methods)
提供 具体的数据访问逻辑
根据执行计划:
- 决定如何访问数据(全表扫描、索引扫描等)
从存储引擎中 读取或修改数据
Step 6:缓冲区管理器(Buffer Manager,读操作)
适用于 只读查询(如 SELECT)
访问方法判断 SQL 是否为 只读语句
若是 SELECT:
- 将请求交给 缓冲区管理器
缓冲区管理器负责:
- 优先从 缓存(Buffer Cache) 中查找数据
- 若缓存未命中,则从 磁盘数据文件 读取数据
Step 7:事务管理器(Transaction Manager,写操作)
适用于 UPDATE / INSERT 等修改操作
如果 SQL 是更新或插入语句:
- 请求交给 事务管理器
事务管理器负责:
- 事务的开启、提交、回滚
- 维护事务状态
- 保证事务的一致性与隔离性
Step 8:锁管理器(Lock Manager)
在事务执行过程中:
- 数据需要处于 加锁状态
锁管理器负责:
- 管理各种锁(行锁、表锁等)
- 协调并发访问
- 防止脏读、丢失更新等问题
最终保证事务满足 ACID 特性
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)