深入理解RDBMS 2 | 青训营笔记

91 阅读5分钟

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

本节课主要介绍:

三、关键技术

3.1一条SQL的一生

image.png SQL引擎

查询解析:SQL语言接近自然语言,入门容易。但是各种关键字、操作符组合起来,可以表达丰富的语意。因此想要处理SQL命令,首先将文本解析成结构化数据,也就是抽象语法树(AST)。

查询优化:SQL是一门表意的语言,只是说『要做什么』,而不说『怎么做』。所以需要一些复杂的逻辑选择『如何拿数据』,也就是选择一个好的查询计划。优化器的作用根据AST优化产生最优执行计划(Plan Tree).

查询执行:根据查询计划,完成数据读取、处理、写入等操作

事务引擎:处理事务一致性、并发、读写隔离等

存储引擎:内存中的数据缓存区、数据文件、日志文件

3.2SQL引擎-Parser

解析器(Parser)一般分为词法分析、语法分析、语义分析等步骤。

image.png

3.2SQL引擎-Optimizer

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

1.条件化简

a =5 and b > a ——>a =5 and b >5

a >5 and a <b and b =1 ——>FALSE

2.表连接优化

·总是小表先进行连接 SELECT FROM A,B,C WHERE A.a1= B.b1 and A.a1 C.b1;

3.Scan优化

唯一索引

普通索引

全表扫描

数据库索引:是数据库管理系统中辅助数据结构,以协助快速查询、更新数据库表中数据。目前数 据库中最常用的索引是通过B+树实现的。

3.2SQL引擎-Executor

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

优点:

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

缺点:

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

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

优点:

函数调用次数降低为1/N,

CPU cache命中率更高;

可以利用CPU提供的SIMD机制

编译执行:

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

3.3存储引擎-B+Tree

页面内: 页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。 从根到叶: 中间节点存储

点查: Select from table where id 2000; 范围查询: Select from table where id 2000;

3.4事务引擎-Atomicity与Undo Log

如何将数据库回退到修改之前的状态?

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

3.4事务引擎-Isolation与MVCC

MVCC的意义:

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

Undo Log在MVCC的作用:

每个事务有一个单增的事务D;

数据页的行记录中包含了DB_ROW_ID, DB_TRX_ID,DB_ROLL_PTR;

DB_ROLL_PTR将数据行的所有快照记录都通过链表的结构串联了起来。

3.4事务引擎-Durability与Redo Log

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

方案一:事务提交前页面写盘

方案二:WAL(Write-ahead logging)

redo log,是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入 磁盘前发生故障,重启ySQL后会根据redo logi重做。

四、企业实践

4.2大流量-Sharding

问题背景: 单节点写容易成为瓶颈 单机数据容量上限

解决方案: 业务数据进行水平拆分 代理层进行分片路由

实施效果: 数据库写入性能线性扩展 数据库容量线性扩展

4.3流量突增-扩容

问题背景: 活动流量上涨 集群性能不满足要求

解决方案: 扩容DB物理节点数量 利用影子表进行压测

实施效果: 数据库集群提供更高的吞吐 保证集群可以承担预期流量

4.4流量突增-代理连接池

问题背景: 突增流量导致大量建联 大量建联导致负载变大,延时上升

解决方案: 业务侧预热连接池 代理侧预热连接池 代理侧支持连接队列

实施效果: 避免DB被突增流量打死 避免代理和DB被大量建联打死

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

三机房部署: 机房级别容灾 机房级别流量调度

proxy: 读写分离,分库分表 限流,流量调度

监控报警: 实时监控集群运行状态 提前上报集群风险

HA: High Availability 实时监控DB运行状态 宕机快速切换

4.5.2稳定性&可靠性-HA管理

问题背景: db所在机器异常宕机 db节点异常宕机

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

实施效果: 读节点宕机秒级恢复 写节点宕机30s内恢复服务

五、课程总结

image.png

引用:

字节内部课-RDBMS 基本情况介绍 - 掘金 (juejin.cn)