简单了解RBO、CBO和HBO

简介: 简单了解RBO、CBO和HBO

RBO

基于规则的优化器 指的是不需要额外的信息,通过用户下发的SQL语句进行的优化,主要通过改下SQL,比如SQL子句的前后执行顺序等。比较常见的优化包括谓语下推、字段过滤下推、常量折叠、索引选择、Join优化等等。RBO对数据不敏感,在表大小固定的情况下,无论中间结果数据怎么变化,只要SQL保持不变,生成的执行计划就都是固定的

CBO

基于代价的优化器,根据收集的统 计信息来计算每种执行方式的代价,进而选择最优的执行方式。

引人了重新排序 Join(JoinReorder)和自动MapJoin(AutoMapJoin )优化规则等,同时基于 Volcano 模型的优 化器会尽最大的搜索宽度来获取最优计划

可以设置规则白名单(使用哪些优化规则)、黑名单(关闭哪些优化规则)

Optimizer 会提供谓词下推( PredicatePushDown )优化,主要目的是尽量早地进行谓词过滤,以减少后续操作的数据量,提高性能。但需要注意的是:

UDF:对于UDF是否下推,优化器做了限制,不会任意下推这种带有用户意图的函数,主要是因为不同用户书写的函数含义不一样,不可以一概而论。不确定函数:对于不确定函数,优化器也不会任意下推,比如 sample 函数,如 果用户将其写在 where 子句中,同时语句存在Join ,则优化器是不会下推到 TableScan 的 隐式类型转换:书写 SQL 语句时,应尽量避免 Join Key 存在隐式类型转换。

CBO优化器通过给CPU、IO、NETWORK赋予代价,来指导生成更优的执行计划

CBO组成

① Meta Manager:优化器在选择优化策略时会使用一些元数据,如数据表元数据,分区元数据,统计信息元数据等。
② Statistics:为优化器提供准确的统计信息,进行优化策略的选择
③ Rule Set:每一条优化规则都是特定场景下的优化点,优化器根据代价模型选择启用哪些规则。规则分为:
    + Substitute Rule:优化了一定好的规则
    + Explore Rule:优化后需要考虑各种因素的规则
    + Build Rule:优化后不能再次优化的规则
④ Volcano Planner Core:把所有信息统一处理,根据代价模型,涉及代价最小的方案

代价计算:发生在产生的新节点注册阶段,计算规则如下:

+ 如果代价不存在或者子节点的代价还没计算,则忽略
+ 如果有代价,则将本身的代价和子节点的代价相加,若小于目前的最优策略,则认为当前节点是最优的。还会对其父节点的代价进行迭代计算,进而估算整条链路的代价

HBO

(History-Based Optimizer,基于历史的优化器)

在任务稳定的情况下,可以考虑基于任务的历史执行情况进行资源评估,即采用HBO

提高 CPU 利用率
提高内存利用率
提高 Instance 并发数
降低执行时长

针对大促这类数据量暴涨的场景, HBO 也增加了根据数据量动态调整 Instance 数的功能,主要依据 Map 的数据量增长情况进行调整。

HBO 分配资源方法:

① 核心思想:基础资源评估+加权资源评估
② 基础资源评估:对于map任务的数量根据用户提交任务的数据量和每个map任务期望执行的数据量来估算;对于reduce任务个数由map任务的输入数据量估算或者根据近几天map任务对reduce任务的输出数据量的平均值进行估算。
③ 加权资源评估:通过当前任务近期执行速度与任务预期执行速度作比较,如果小于预期则等比例添加资源,估算出最终的任务数量

参考资料:

https://www.6aiq.com/article/1670429368683
https://zhuanlan.zhihu.com/p/627340125

常见RBO优化点

各种表达式的重写和化简
Cast 消除
谓词化简
公共谓词提取
列裁剪
Shuffle 列裁剪 (确保任何多余的列不要参与网络传输)
谓词下推
等价谓词推导(常量传播)
Outer Join 转 Inner Join
Limit Merge
Limit 下推
聚合 Merge
Intersect Reorder
常量折叠
公共表达式复用
子查询改写
Lateral Join 化简
Empty Node 优化
Empty Union, Intersect, Except 裁剪
In 转 Semi Join 或者 Inner Join  (http://mysql.taobao.org/monthly/2023/01/01/)
聚合算子复用
  # 比如对于下面的 SQL:
  # SELECT AVG(x), SUM(x) FROM table
  #我们可以让 AVG(x) 复用 SUM(x) 的计算结果,减少计算量
Primary Key 相关优化
冗余 Group By 消除
Sum 常量转 Count
Data Skipping

常见CBO优化点

多阶段聚合优化
Join 左右表 Reorder
Join 多表 Reorder
Join 分布式执行选择
Shuffle Join
Broadcast Join
Bucket Shuffle Join
Colocate Join
Replication Join
Join 和 Aggregate Runtime Colocate, 避免 Shuffle
CTE 复用
CTE 列裁剪
Agg 上拉
Agg 下推 Join
Agg 下推 GroupingSets
窗口下推 Group By
算子融合
物化视图选择与改写
利用基数信息进行优化

HBO常见优化点

表元数据本地缓存(表来源、表定义、分区个数、分区信息、文件列表、统计信息等)
hdfs文件缓存
sql执行记录结果集落表(sql提交失败、运行失败、运行成功)
保存历史sql执行时,预估内存值和实际消耗内存值
DataCache
多表物化视图
相关文章
|
消息中间件 分布式计算 大数据
大数据面经 字节跳动 (整理)
大数据面经 字节跳动 (整理)
913 0
|
5月前
|
人工智能 运维 Apache
Flink Agents 0.3 Roadmap解读
Apache Flink Agents 是 Apache Flink 新晋子项目,专注构建事件驱动的流式 AI Agent。0.3 版本 roadmap 已公布:支持 Agent Skills 集成、Mem0 长期记忆、跨语言 Action/Events、Python 3.12、日志分级与可观测性增强等,目标打造生产级流式 Agent 框架。
881 2
|
SQL 存储 API
Flink教程(20)- Flink高级特性(双流Join)
Flink教程(20)- Flink高级特性(双流Join)
1802 0
|
存储 数据采集 分布式计算
一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)
一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)
一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)
|
10月前
|
存储 人工智能 分布式计算
阿里云DLF 3.0:面向AI时代的智能全模态湖仓管理平台
在2025年云栖大会,阿里云发布DLF 3.0,升级为面向AI时代的智能全模态湖仓管理平台。支持结构化与非结构化数据统一管理,实现秒级实时处理、智能存储优化与细粒度安全控制,助力企业高效构建Data+AI基础设施。
2791 3
|
4月前
|
人工智能 Cloud Native Apache
Flink Forward Asia 2026 官宣深圳|From Cloud Native to AI Native
Flink Forward Asia 2026将于6月26–27日首次落地深圳,主题为“实时数据,智能未来”。大会聚焦Flink从Cloud Native迈向AI Native的演进,发布Flink 2.0、Paimon 2.0、Fluss 1.0及Flink Agents等重磅进展,并联合NVIDIA、阿里云共探实时AI与多模态流处理。免费报名中!
1671 1
|
5月前
|
存储 监控 Apache
写入快 2 倍,查询快 6 倍,存储成本反降 50%:丰巢日志平台从 ELK 升级为 Apache Doris
丰巢日志平台从 ELK 升级至 Apache Doris,旨在构建统一、高效的可观测性底座。新架构解决了原系统在写入、存储和查询上的瓶颈:存储成本降低 50%,写入性能提升 2 倍,查询速度提升 6 倍。为未来统一可观测性平台的建设奠定了技术基础
562 1
写入快 2 倍,查询快 6 倍,存储成本反降 50%:丰巢日志平台从 ELK 升级为 Apache Doris
|
5月前
|
存储 分布式计算 运维
迅雷基于阿里云 EMR Serverless Spark 实现数仓资源效率与业务提升
迅雷基于阿里云 EMR Serverless Spark 实现数仓资源效率与业务提升,在迁移到 EMR Serverless Spark 之后,TCO 明显下降,平台按作业生命周期弹性拉起与回收,只为实际消耗付费;同时,托管化带来了稳定性与调度效率提升;更关键的是交付确定性提升,大作业整体可提速约 1 小时,报表链路从长尾波动变成更可控的出数节奏。
|
SQL Serverless 测试技术
体验 Serverless StarRocks × Paimon (DLF) 查询 TPC-DS 标准库性能
本文介绍如何通过共享TPC-DS样例数据集,创建并绑定DLF Catalog到StarRocks实例,实现高效数据查询与分析。内容涵盖RAM用户授权、外部Catalog连接、性能测试(如TPC-DS Query 3)、数据写入内外表、物化视图构建数仓DWD-ADS层,以及通过Quick BI进行可视化报表展示的完整流程,助力快速搭建湖仓一体架构。
390 0
|
人工智能 运维 Java
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
本文基于Apache Flink PMC成员宋辛童在Community Over Code Asia 2025的演讲,深入解析Flink Agents项目的技术背景、架构设计与应用场景。该项目聚焦事件驱动型AI智能体,结合Flink的实时处理能力,推动AI在工业场景中的工程化落地,涵盖智能运维、直播分析等典型应用,展现其在AI发展第四层次——智能体AI中的重要意义。
3737 27
Flink Agents:基于Apache Flink的事件驱动AI智能体框架

热门文章

最新文章