CloudberryDB什么条件下使用Runtime Filter
前文讲述了CloudberryDB的Runtime Filter两种实现方法。Hash Join时,将内表的值构建hash表的同时将其再构建到布隆过滤器中,然后将该过滤器传递给左子树的RuntimeFilter算子或者下沉到SeqScan算子,但是布隆过滤器的生成、传输及检查会引入额外开销,若不加节制滥用,则可能导致性能下降。CloudberryDB什么条件下才会使用Runtime Filter呢?
生成RuntimeFilter执行计划是由函数try_runtime_filter进行判断,我们看下上下流程:

1、try_runtime_filter为检测是否生成RuntimeFilter算子路径的函数,调用该函数的前提是gp_enable_runtime_filter配置项打开
2、try_runtime_filter能够生成RuntimeFilter路径的条件有4个:
(1)仅支持INNER JOIN、RIGHT JOIN和SEMI JOIN
(2)内表估算的行数需要小于等于10M
(3)不支持by-reference类型
(4)通过该算子至少可以过滤掉外表40%的记录
3、估算出的最终join结果规模保存在runtime_filter_tuples中,当create_hashjoin_path创建hash join路径时,检查到runtime_filter_tuples > 0即创建RuntimeFilter路径,并将它加入到hash join路径的left子路径。
5062

被折叠的 条评论
为什么被折叠?



