深入理解RDBMS|青训营笔记

27 阅读2分钟

关键技术

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

1.1 一条SQL的一生

UPDATE account_table SET balance = balance - '小目标' WHERE name = '抖音'; 截屏2023-02-15 22.06.13.png

1.2 SQL引擎

  • Parser
    • 解析器(Parser)一般分为词法解析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。 截屏2023-02-15 22.09.34.png
  • Optimizer
    • 基于规则的优化(RBO Rule Base Optimizer)
      • 条件化简
      • 表连接优化
        • 总是小表先进行连接
      • Scan优化(数据库索引:是数据库管理系统中辅助数据结构,一哦协助快速查询、更新数据表中数据。目前数据库中最常用的索引是通过B+树实现的。)
        • 唯一索引
        • 普通索引
        • 全表扫描
      • 基于代价的优化(CBO Cost Base Optimizer)
  • Excutor
    • 火山模型
      • 截屏2023-02-15 22.17.00.png

      • 每个Opertor调用Next操作,访问下层Operator,并获得下层Operator返回的一行数据,经过计算之后,将这行数据返回给上层。

      • 优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单

      • 缺点:每计算一条数据有多次函数调用开销,导致CPU效率不高

    • 向量化
      • 截屏2023-02-15 23.12.19.png
      • 每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算子返回一个Batch
      • 优点:
        • 函数调用次数降低为1/N
        • CPU cache命中率更高
        • 可以利用CPU提供的SIMD机制
    • 编译执行
      • 截屏2023-02-15 23.27.16.png
      • LLVM动态编译技术

1.3 存储引擎

  • InnoDB 截屏2023-02-15 23.30.29.png
  • Buffer Pool
  • Page
  • B+ tree

1.4 事务引擎

  • Atomicity 与 Undo Log
    • undo log是逻辑日志,记录的是数据的增量变化。利用undo log 可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制(MVCC),解决读写冲突和一致性的问题。
  • Isolation与锁
  • Isolation与MVCC
    • MVCC的意义
      • 读写互不阻塞
      • 降低死锁概率
      • 实现一致性读
    • Undo Log在MVCC的作用
      • 每个事务有一个单增德事务ID
      • 数据页的行记录中包含DB_ROW_ID,DB_TRX_ID,DB_ROLL_PTR
      • DB_ROLL_PTR将数据行的所有快照记录都通过链表的结构串联了起来
  • Durability与Redo Log
    • WAL(Write-ahead logging)
      • redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入磁盘前发生故障,重启MySQL后会根据redo log重做。