系统优化
在任务稳定的情况下,可以考虑基于任务的历史执行情况进行资源评估, 即采用HBO (History-Based Optimiz町, 基于历史的优化器)。
CBO (Cost-Based Optimizer , 基于代价的优化器),首先会想到 Oracle 的 CBO 。 Oracle 会根据收集到的表、分区、索引等统计信息来计算每种执行方式的代价( Cost ),进而选择其中最优的执行方式。一般来说,对于更多的、更准确的统计信息, CBO 则可能生成代价更小的执行计划。
HBO
HBO 是根据任务历史执行情况为任务分配更合理的资源,包括内存、 CPU 以及 Instance 个数。 HBO 是对集群资源分配的一种优化,概括起来就是:任务执行历史+集群状态信息+优化规则→更优的执行配置。
假如把处理数据量小的任务称作小任务,处理数据量大的任务称作大任务,总结 :在默认的 Instance 算法下,小任务存在资源浪费,而大任务却资源不足。综上所述,需要有更合理的方法来进行资源分配,HBO 应运而生。
HBO 的提出
通过数据分析,发现在系统中存在大量的周期性调度的脚本(物理计划稳定),且这些脚本的输入一般比较稳定,如果能对这部分脚本进行优化,那么对整个集群的计算资源的使用率将会得到显著提升。由此,我们想到了 HBO ,根据任务的执行历史为其分配更合理的计算资源。HBO 一般通过自造应调整系统参数来达到控制计算资源的目的。
HBO 原理
HBO 分配资源的步骤如下:
·前提 :最近 7 天内任务代码没有发生变更且任务运行 4 次。
• Instance 分配逻辑:基础资源估算值+加权资源估算值。
CBO
MaxCompute 2.0 引人了基于代价的优化器( CBO ),根据收集的统计信息来计算每种执行方式的代价,进而选择最优的执行方式。