RDBMS关键技术 | 青训营笔记

70 阅读2分钟

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

RDBMS关键技术 | 青训营笔记

发展历史

image.png

一条SQL的一生

  1. 数据库接受到SQL后先用语法解析其解析语句
  2. 语法解析器生成语法树给优化器
  3. 优化器生成plan tree给执行器
  4. 执行器从数据文件中进行读写,最后返回给用户

SQL引擎

语法解析器

一般分为词法分析,语法分析,语义分析等步骤

image.png

优化器

为什么需要优化器?
白话理解:类似于路径规划,选择一种最优的查询方式查询

基于规则的优化(RBO Rule Base Optimizer)

  • 条件化简
  • 小表先进行连接
  • Scan优化
    • 基于唯一索引
    • 基于普通索引
    • 全表扫描 数据库索引是数据库管理系统中辅助数据结构,以协助快速查询更新数据库表中的数据。目前数据库中最常用的索引是B+树实现的。

基于代价的优化(CBO Cost Base Optimizer)

什么是代价?
时间、IO、CPU、NET、MEM

执行器

火山模型

image.png

每个Operator调用next操作,访问下层Operator,偶的下层Operator返回的一行数据,经过计算后将这行数据返回给上层。

优点
每个算子独立抽象实现,相互之间没有耦合
缺点
每计算一条数据有多次函数调用开销,导致CPU效率不高

火山模型用的最多的一种模型,在此基础上发展出向量化、编译执行等其他模型

向量化是每次计算一批数据,返回一批
编译执行是把所有操作封装到一个函数里面,使用动态编译技术

存储引擎 - 以InnoDB为例

image.png

Buffer Pool

Buffer分为多个instance,每个instance分为多个chunk,每个chunk分为多个page

Page

image.png directory:二分查找+很短的遍历

B+树

image.png 范围查找,找到节点后可以利用双向链表,横向遍历

事务引擎

数据库状态回退

image.png

Isolation与MVCC

MVCC的意义

  • 读写互不阻塞
  • 降低死锁概率
  • 实现一致性读 多版本数据存储,链式连接,新版本存在Record,老版本存在undo

image.png

持久化

问题

  • 随机IO效率低
  • 写放大:只要写很少的数据,但是得把整个page(16kB)写进去

方案:Write-ahead logging
物理日志,记录了页面变化,先把日志写盘,日志写盘后代表事务提交。如果数据还没写进去就宕机,重启后会根据redo log恢复数据