查询反馈
Experimental feature
本主题介绍查询反馈功能、其应用场景,以及如何基于执行统计信息使用查询计划顾问优化查询计划。
StarRocks 从 v3.4.0 开始支持查询反馈功能。
概述
查询反馈是一个框架,也是CBO优化器的关键组件。它在查询执行期间记录执行统计信息,并在后续具有类似查询计划的查询中重用这些信息,以帮助CBO生成优化的查询计划。CBO基于估计的统计信息优化查询计划,因此当统计信息过时或不准确时,可能会选择低效的查询计划(坏计划),例如广播大表或错误排序左右表。这些坏计划可能导致查询执行超时、资源消耗过多,甚至系统崩溃。
工作流程
基于查询反馈的计划优化工作流程包括三个阶段:
- 观察:BE或CN记录每个查询计划中PlanNode的主要指标(包括
InputRows和OutputRows)。 - 分析:对于超过配置阈值的慢查询和手动标记为需要分析的查询,系统将在查询完成后、结果返回前分析关键节点的执行细节,以识别当前查询计划中的优化机会。FE将查询计划与执行统计信息进行比较,并检查查询是否由于异常查询计划导致慢查询。在分析不准确的统计信息时,FE会为每个查询生成SQL调优指南,指导CBO动态优化查询,并推荐提高性能的策略。
- 优化:在CBO生成物理计划后,它将搜索适用于该计划的现有调优指南。如果存在,CBO将根据指南和策略动态 优化计划,纠正问题部分,从而消除由于重复使用坏查询计划对查询性能的影响。优化计划的执行时间与原始计划进行比较,以评估调优的有效性。
用法
受系统变量enable_plan_advisor(默认值:true)控制,查询计划顾问默认对慢查询启用,即执行时间超过FE配置项slow_query_analyze_threshold(默认值:5秒)的查询。
此外,您可以手动分析特定查询或为所有执行的查询启用自动分析。
手动分析特定查询
即使执行时间未超过slow_query_analyze_threshold,您也可以手动分析特定查询语句。
ALTER PLAN ADVISOR ADD <query_statement>
示例:
ALTER PLAN ADVISOR ADD SELECT COUNT(*) FROM (
SELECT * FROM c1_skew_left_over t1
JOIN (SELECT * FROM c1_skew_left_over WHERE c1 = 'c') t2
ON t1.c2 = t2.c2 WHERE t1.c1 > 'c' ) t;
为所有查询启用自动分析
要为所有查询启用自动分析,您需要将系统变量enable_plan_analyzer(默认值:false)设置为true。
SET enable_plan_analyzer = true;
显示当前FE上的调优指南
每个FE维护其自己的调优指南记录。您可以使用以下语句查看当前FE上为授权查询生成的调优指南:
SHOW PLAN ADVISOR