根据需要设置关联发生的节点 多表关联的逻辑默认是在DN节点执行,在发生重分布后,可能会因为重分布原因性能明显下降。您可以选择将关联逻辑上拉到CN节点执行,避免DN之间的重分布。 多表关联的逻辑默认是在DN节点执行,在发生重分布后,可能会因为重分布原因性能明显下降。 针对此问题,TeleDB支持通过参数preferolap设置,可以选择将关联逻辑上拉到CN节点执行,避免DN之间的重分布。参数preferolap默认为on,表示关联下推到DN执行,off则表示关联上拉到DN执行。 这里需要注意,设置关联上拉CN节点执行,需要提前做好评估,如果上拉数据量过大,大量并发SQL发起上拉数据到CN动作,会导致CN节点负载过高,甚至OOM。 通常可以在TP类业务中可以针对SQL会话级设置上拉,性能会有所提升,同时CN节点应配置较大的资源,避免OOM发生。 例如,下面的SQL,teledb1关联没有用到分布键,发生了重分布。 teledb explain select teledb1. from teledb1,teledb2 where teledb1.f1teledb2.f1 ; QUERY PLAN Remote Subquery Scan on all (dn001,dn002) (cost29.80..186.32 rows3872 width40) > Hash Join (cost29.80..186.32 rows3872 width40) Hash Cond: (teledb1.f1 teledb2.f1) > Remote Subquery Scan on all (dn001,dn002) (cost100.00..158.40 rows880 width40) Distribute results by S: f1 > Seq Scan on teledb1 (cost0.00..18.80 rows880 width40) > Hash (cost18.80..18.80 rows880 width4) > Seq Scan on teledb2 (cost0.00..18.80 rows880 width4) (8 rows) 设置preferolapoff后,关联上拉到CN上执行,重分布消失。 执行计划如下: teledb