深入理解RDBMS|青训营笔记

45 阅读3分钟

t01b6a22fb7cbac8bad.jpg

这是我参与[第五届青训营]伴学笔记创作活动的第 15 天


一条SQL的一生

image.png

SQL引擎-Parser

解析器(Parser)一般分为词法分析( Lexical analysis )、语法分析( Syntax analysis ) 语义分析(Semantic analyzer)等步骤

SQL引擎-Optimizer

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

  • 条件简化
  • 表连接优化
    • 总是小表先连接
  • Scan优化
    • 唯一索引
    • 普通索引
    • 全表扫描

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

  • 时间、IO、CPU、NET、MEM

SQL引擎一Executor

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

image.png

向量化

每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算子返回一个Batch

优点

  • 函数调用次数降低为1/N
  • CPU cache命中率更高
  • 可以利用CPU提供的SIMD(Single Instruction Multi Data)机制
编译执行

将所有的操作封装到一个函数里面,函数调用的代价也能大幅度降低

LLVM动态编译执行技术

存储引擎- InnoDB

image.png In-Memory :

  • Buffer Pool
  • Change Buffer
  • Adaptive Hash
  • IndexLog Buffer

On-Disk :

  • System Tablespace(ibdata1)
  • General Tablespaces(xxx.ibd)
  • Undo Tablespaces(xxx.ibu)
  • Temporary Tablespaces(xxx.ibt)
  • Redo Log(ib_logfileN)

存储引擎-Buffer Pool

缓冲池是主内存中的一个区域,用于按原样缓存表和索引数据访问。缓冲池允许经常使用的数据直接从内存访问,从而加快处理速度

缓冲池是分为可能包含多行的页面。为 缓存管理的效率,缓冲池实现为页面链接列表

缓冲池作为列表使用LRU的变体进行管理算法

哈希索引

image.png

事务引擎- Atomicity 与Undo Log

Undo Log是逻辑日志,记录的是数据的增量变化。利用Undo Log可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制(MVCC),解决读写冲突和一致性读的问题

事务引擎- Isolation与锁

Share Lock , Exclusive Lock

事务引擎- Isolation 与 MVCC

MVCC的意义

  • 读写互不阻塞
  • 降低死锁概率
  • 实现一致性读

Undo Log在MVCC的作用

  • 每个事务有一个单增的事务ID
  • 数据页的行记录中包含了DB_ROW_ID,DB_TRX_ID,DB_ROLL_PTR
  • DB_ROLLPTR将数据行的所有快照记录都通过链表的结构串联了起来

事务引擎- Durability 与Redo Log

如何保证事务结束后,对数据的修改永久的保存?

  1. 事务提交前页面写盘(随机IO,写放大)
  2. WAL(Write-ahead logging):redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入磁盘前发生故障,重启MySQL后会根据redo log重做

实践

大流量- Sharding

解决方案

  • 业务数据进行水平拆分
  • 代理层进行分片路由

实施效果

  • 数据库写入性能线性扩展
  • 数据库容量线性扩展

流量突增-扩容

解决方案

  • 扩容DB物理节点数量
  • 利用影子表进行压测

实施效果

  • 数据库集群提供更高的吞吐
  • 保证集群可以承担预期流量

流量突增一代理连接池

解决方案

  • 业务侧预热连接池
  • 代理侧预热连接池
  • 代理侧支持连接队列

实施效果

  • 避免DB被突增流量打死
  • 避免代理和DB被大量建联打死

稳定性&可靠性-3AZ高可用

多机房部署,通过日志和代理将机房连接起来

稳定性&可靠性-HA管理

问题背景

  • db所在机器异常宕机
  • db节点异常宕机

解决方案

  • ha服务监管、切换宕机节点
  • 代理支持配置热加载
  • 代理自动屏蔽宕机读节点

实施效果

  • 读节点宕机秒级恢复
  • 写节点宕机30s内恢复服务

参考资料

LLVM: t.csdn.cn/cVHRM

Buffer Pool:dev.mysql.com/doc/refman/…