查询反馈
Experimental feature
本主题介绍查询反馈功能、其应用场景,以及如何基于执行统计信息使用查询计划顾问优化查询计划。
StarRocks 从 v3.4.0 开始支持查询反馈功能。
概述
查询反馈是一个框架,也是CBO优化器的关键组件。它在查询执行期间记录执行统计信息,并在后续具有类似查询计划的查询中重用这些信息,以帮助CBO生成优化的查询计划。CBO基于估计的统计信息优化查询计划,因此当统计信息过时或不准确时,可能会选择低效的查询计划(坏计划),例如广播大表或错误排序左右表。这些坏计划可能导致查询执行超时、资源消耗过多,甚至系统崩溃。
工作流程
基于查询反馈的计划优化工作流程包括三个阶段:
- 观察:BE或CN记录每个查询计划中PlanNode的主要指标(包括
InputRows和OutputRows)。 - 分析:对于超过配置阈值的慢查询和手动标记为需要分析的查询,系统将在查询完成后、结果返回前分析关键节点的执行细节,以识别当前查询计划中的优化机会。FE将查询计划与执行统计信息进行比较,并检查查询是否由于异常查询计划导致慢查询。在分析不准确的统计信息时,FE会为每个查询生成SQL调优指南,指导CBO动态优化查询,并推荐提高性能的策略。
- 优化:在CBO生成物理计划后,它将搜索适用于该计划的现有调优指南。如果存在,CBO将根据指南和策略动态优化计划,纠正问题部分,从而消除由于重复使用坏查询计划对查询性能的影响。优化计划的执行时间与原始计划进行比较,以评估调优的有效性。