文档首页 > > 开发指南> 优化查询性能> 改进查询> 配置SMP> SMP适用场景与限制

SMP适用场景与限制

分享
更新时间: 2019/06/24 GMT+08:00

SMP特性通过算子并行来提升性能,同时会占用更多的系统资源,包括CPU、内存、网络、I/O等等。本质上SMP是一种以资源换取时间的方式,在合适的场景以及资源充足的情况下,能够起到较好的性能提升效果;但是如果在不合适的场景下,或者资源不足的情况下,反而可能引起性能的劣化。1.3.x新增了SMP自适应特性,该特性会根据当前资源和查询特征,动态选取最优的并行度。下面对各种资源对SMP性能的影响情况分别进行说明:

适用场景

  • 支持并行的算子

    计划中存在以下算子支持并行:

    1. Scan:支持行存普通表和行存分区表顺序扫描、列存普通表和列存分区表顺序扫描、OBS外表(ORC格式)顺序扫描;支持GDS数据导入的外表扫描并行。以上均不支持复制表。
    2. Join:HashJoin、NestLoop
    3. Agg:HashAgg、SortAgg、PlainAgg、WindowAgg(只支持partition by,不支持order by)。
    4. Stream:Redistribute、Broadcast
    5. 其他:Result、Subqueryscan、Unique、Material、Setop、Append、VectoRow、RowToVec
  • SMP特有算子

    为了实现并行,新增了并行线程间的数据交换Stream算子供SMP特性使用。这些新增的算子可以看做Stream算子的子类。

    1. Local Gather:实现DN内部并行线程的数据汇总
    2. Local Redistribute:在DN内部各线程之间,按照分布键进行数据重分布
    3. Local Broadcast:将数据广播到DN内部的每个线程
    4. Local RoundRobin:在DN内部各线程之间实现数据轮询分发
    5. Split Redistribute:在集群跨DN的并行线程之间实现数据重分布
    6. Split Broadcast:将数据广播到集群所有DN的并行线程

    上述新增算子可以分为Local与非Local两类,Local类算子实现了DN内部并行线程间的数据交换,而非Local类算子实现了跨DN的并行线程间的数据交换。

  • 示例说明

    以TPCH Q1的并行计划为例:

    图1 TPCH Q1并行执行计划

    在这个计划中,实现了Partitioned CStore Scan以及HashAgg算子的并行,并且新增了Local Gather和Split Redistribute数据交换算子。

    其中6号算子为Split Redistribute算子,上面标有的“dop: 2/2”表明Split Redistribute的发送端和接收端线程的并行度均为2。4号算子为Local Gather,上面标有“dop: 1/2”,该算子的发送端线程并行度为2,而接收端线程并行度为1,即下层的5号Hash Aggregate算子按照2并行度执行,而上层的1~3号算子按照串行执行,4号算子实现了DN内并行线程的数据汇总。

    通过计划Stream算子上标明的dop信息即可看出各个算子的并行情况。

非适用场景

  1. 不支持CN上的算子并行。
  2. 不支持不能下推的查询并行执行。
  3. 不支持子查询subplan和initplan的并行,以及包含子查询的算子并行。
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区