问题一:PQ2.0的自适应执行策略是如何实现的,解决了什么问题?
PQ2.0的自适应执行策略是如何实现的,解决了什么问题?
参考回答:
PQ2.0的自适应执行策略通过解耦串行优化与并行优化、并行优化与并行计划生成,使得执行策略更加灵活。当资源不足时,可以退回串行执行、降低并行度或进入调度队列等待资源。这一策略解决了早期版本中无法根据资源动态调整执行策略,导致CPU资源占用过高的问题。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667916
问题二:请简述PQ2.0并行优化中的穷尽式枚举过程?
请简述PQ2.0并行优化中的穷尽式枚举过程?
参考回答:
PQ2.0的并行优化是一个自底向上、基于动态规划的穷尽式枚举过程。针对每个算子,枚举可能的并行执行方式和数据分发方式,并基于输出数据的physical property(distribution + order)构建物理等价类进行局部剪枝。通过获取局部子问题的最优解并向上层传递,最终在root operator处获取全局最优解。这一过程中会产生一系列带有数据分发Exchange Enforcer的物理算子树,基于代价选择最优树。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667918
问题三:为什么PQ2.0在并行计划生成中采用了physical plan clone机制?
为什么PQ2.0在并行计划生成中采用了physical plan clone机制?
参考回答:
PQ2.0在并行计划生成中采用physical plan clone机制,是因为MySQL的优化和执行是耦合在一起的,没有清晰的边界。在优化过程中已经构建了相关的执行结构,无法根据独立的计划描述直接构建出各个物理执行结构。因此,需要从串行计划中“clone”出各个计划片段的物理执行计划。这一方法虽然增加了复杂度,但团队在此过程中对MySQL的优化执行结构有了更深入的理解,并发现了社区的一些bug。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667919
问题四:PolarDB在并行执行中,如何通过逻辑分区实现parallel scan?
PolarDB在并行执行中,如何通过逻辑分区实现parallel scan?
参考回答:
PolarDB作为共享存储系统,采用逻辑分区方案实现parallel scan。在btree级别,数据被切分成多个小分片,不同worker通过round robin方式“抢”分片来执行,从而触发并行执行。这种方式可以自然解决数据分布skew导致的负载不均衡问题,并且切分时可以不必深入到叶子节点,以page作为最小分区单位来加速初始分区速度。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667920
问题五:在PolarDB的parallel hash join中,build阶段和probe阶段是如何实现并行的?
在PolarDB的parallel hash join中,build阶段和probe阶段是如何实现并行的?
参考回答:
在PolarDB的parallel hash join中,build阶段和probe阶段都实现了并行支持。在build阶段,多个worker向同一个共享的lock-free hash table中并行插入数据。在probe阶段,多个worker则并行到hash table中进行搜索。这两个阶段没有重叠,从而实现了全阶段的并行。然而,这种方式也带来了潜在问题,如共享hash table过大时可能导致spill to disk,以及并行插入时的cache invalidation问题。
关于本问题的更多问答可点击原文查看: