更新时间:2024-06-03 GMT+08:00
指定Stream Hashagg优化方式的Hint
功能描述
在并行的执行计划中,当算子使用的列和group by使用的列不一致,且使用hash算子时,会对计划进行重分布的优化。这时可以使用该hint控制计划的生成。
语法格式
redistribute_agg[(@queryblock)], agg_redistribute_agg[(@queryblock)]
参数说明
- @queryblock请参见指定Hint所处于的查询块Queryblock,可省略,表示在当前查询块生效。
- redistribute_agg指定stream hashagg使用重分布-聚合的计划。
- agg_redistribute_agg指定stream hashagg使用聚合-重分布-聚合的计划。
示例
--准备 CREATE TABLE agg_t1 (a int, b int, c int); set explain_perf_mode=pretty; --打开explain pretty选项,可以看到更详尽计划 set query_dop = 2; --设置并行度 --不使用stream agg hint gaussdb=# EXPLAIN (costs off) SELECT /*+ scandop(agg_t1 2)*/ a, avg(b), sum(c) FROM agg_t1 GROUP by a ORDER by 1,2,3; id | operation ----+----------------------------------------------------------- 1 | -> Sort 2 | -> Streaming(type: LOCAL GATHER dop: 1/2) 3 | -> HashAggregate 4 | -> Streaming(type: LOCAL REDISTRIBUTE dop: 2/2) 5 | -> HashAggregate 6 | -> Seq Scan on agg_t1 (6 rows) --使用redistribute_agg hint gaussdb=# EXPLAIN (costs off) SELECT /*+ redistribute_agg scandop(agg_t1 2)*/ a, avg(b), sum(c) FROM agg_t1 GROUP BY a ORDER BY 1,2,3; id | operation ----+----------------------------------------------------------- 1 | -> Sort 2 | -> Streaming(type: LOCAL GATHER dop: 1/2) 3 | -> HashAggregate 4 | -> Streaming(type: LOCAL REDISTRIBUTE dop: 2/2) 5 | -> Seq Scan on agg_t1 (5 rows)
可以看到redistribute_agg hint可以使计划改为重分布-聚合,而不是聚合-重分布-聚合。
父主题: 使用Plan Hint进行调优