问题一:相比于parallel hash join,partition hash join有什么优势和劣势?
相比于parallel hash join,partition hash join有什么优势和劣势?
参考回答:
相比于parallel hash join,partition hash join可以避免由于共享hash table过大导致的spill to disk问题,以及并行插入时“同步”原语带来的cache invalidation问题。然而,partition hash join的代价是引入了数据shuffle的开销,即数据需要在不同worker之间重新分配,这可能会增加额外的网络传输和数据处理时间。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667922
问题二:在执行计划生成(plan generation)阶段,clone和refix操作分别负责什么任务?
在执行计划生成(plan generation)阶段,clone和refix操作分别负责什么任务?
参考回答:
在执行计划生成阶段,clone操作负责根据串行物理执行计划和子slice的描述,将相对应的结构clone到各个worker线程中。例如,将t1 join t2操作及其后续的聚集操作clone到worker上执行。而refix操作则负责将原始的串行计划转换为leader计划,包括去掉不必要的执行结构,调整引用关系,如将引用t1/t2表的结构替换为引用collector表的对应结构,以便leader节点可以从collector表中读取worker传递上来的数据。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667923
问题三:在分布式查询执行过程中,数据是如何在build和probe两侧进行分发的?
在分布式查询执行过程中,数据是如何在build和probe两侧进行分发的?
参考回答:
在分布式查询执行过程中,build和probe两侧都根据join key进行数据分发。它们通过shuffle操作将数据发送到目标partition,确保相同join key的数据位于同一partition内,以便于后续join操作的执行。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667924
问题四:在每个partition内,build侧是如何准备数据的?
在每个partition内,build侧是如何准备数据的?
参考回答:
在每个partition内,build侧会构建一个小hash table来存储其数据。这样做是为了在probe侧进行查找时能够更高效地定位到对应的记录,同时避免了因hash table过大而导致的落盘问题。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667925
问题五:在并行查询中,如何确定使用哪种join策略更优?
在并行查询中,如何确定使用哪种join策略更优?
参考回答:
并行查询中,使用哪种join策略(如上述提到的基于partition的co-located join)更优,是由并行优化器基于Cost(成本)来决定的。优化器会评估不同策略的执行成本,并选择成本最低的策略来执行。
关于本问题的更多问答可点击原文查看: