如图所示,按照自适应优化按照的生效场合,可以分为运行中和事后基于历史的两大类。图中蓝色部分是运行中的一些优化方式,首先是对计划的调整,比如对物理算子的选择,最常见的是 HashJoin、SortMergeJoin 或者 Index Join。另外在分布式执行计划中最重要的就是如何进行数据分布,通过对小数据量的进行广播,避免 Join 的另外一边进行数据 Reshuffle。还有就是不同任务计算节点的并发数,对小数据量进行分布式计算会带来额外的资源开销,针对数据倾斜的分片需要进行重新的Reshuffle。另外一个运行中优化的重要手段就是算子本身具备的自适应,在分布式计划中一个非常常见的优化手段就是 Partial Aggregation,但并不是所有的聚合操作都在局部有一定的收敛性,自适应的局部聚合算子在处理了部分数据后,发现本身没有收敛性,可以快速放弃做局部聚合。此外,还有一个运行中的优化手段,就是 DynamicFilterPushDown了,这个目前在很多计算引擎都具备,就不做过多展开。
资料来源:《数据库:从趋势到实践》,链接:https://developer.aliyun.com/topic/download?id=1113
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。