RDBMS | 青训营笔记

63 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

关系型数据库的关键技术

  • SQL引擎
  • 存储引擎
  • 事务引擎

SQL引擎

当一条SQL语句到达RDBMS后,将如下图所示执行:

image.png

可以看到在RDBMS中,SQL语句先后由 Parser 解析生成语法树,交由 Optimizer 优化生成计划树,最终由 Executor 执行。

  • Parser 解析器:经过词法分析、语法分析生成语法树,然后对语法树进行合法性校验。
  • Optimizer 优化器:根据Parser产生的语法树,根据规则或者代价产生执行计划树。
  • Executor 执行器:根据计划树进行执行,常见的执行方式是火山模型。

Parser 解析器

在 Parser 中词法分析、语法分析、语义分析的流程

image.png

Optimizer 优化器

查询优化器方法有两类,基于规则的优化RBO基于代价的优化CBO Rule/Cost Base Optimizer

RBO - 基于规则优化,通过关系代数的等价语义重写查询语句

  • 条件简化 - 将复杂语句简化
  • 表连接简化 - 总是小表先进行连接
  • Scan优化 - 对索引的选择优化,在唯一索引、普通索引、全表扫描中选择效率最高的方式

CBO - 基于开销优化,考虑时间、IO、CPU、NET、MEN等资源

Execuot 执行器

火山引擎

执行流程:对于每个 Operator 调用Next操作,访问下一层的 Operator,获取下一层返回的结果,再执行计算,将该层的结果向上返回

优点:每次的计算独立、没有耦合,逻辑简单清晰

缺点:每次计算有多次函数调用开销,CPU效率不高

向量化模型

执行流程:每次操作计算一批数据(Batch N行数据),计算完成后向上返回Batch

优点:将函数调用次数降低至 1/N ,CPU cache命中率更高,可以利用CPU的SIMD机制

SIMD(单指令多数据流):一条指令同时处理多个数据

编译执行模型

将所有操作封装到一个函数中,降低函数调用的代价。

需要通过LLVM动态编译执行技术

存储引擎

InnoDB是最为常见的存储引擎,通过InnoDB来了解存储引擎的特点

分为两个部分 In-Memory 和 On-Disk,内存和磁盘两个部分

  • In-Memory - 在内存中做数据缓存减小IO开销
  • On-Disk - 存储系统表、事务日志表

Buffer Pool

B+树

事务引擎

原子性 和 Undo Log

持久性 和 Redo Log

隔离性 和 MVCC