表达式的基数估计(CE)反馈

适用于:SQL Server 2025(17.x)预览版Azure SQL 数据库Microsoft Fabric 中的 SQL 数据库

不准确的基数估计通常会导致查询优化期间性能不佳。 表达式的基数估计(CE)反馈基于最初由 CE 反馈功能引入的框架,进行扩展和完善。 目标是改进重复表达式的基数估计。 表达式功能的反馈从以前跨查询执行的表达式中学习,以查找适当的 CE 模型选择,并将所学到的内容应用于这些表达式的未来执行。 与 CE 反馈一样,模型建议会自动测试和应用于将来的查询执行。

表达式功能的反馈可识别和使用 模型假设来 更好地适应给定查询的表达式和数据分布,进而提高查询执行计划质量。 目前,表达式功能的反馈可以识别计划运算符,其中估计的行数和实际行数大相径庭。 当发生重大模型估计错误时,反馈将应用于查询中的表达式,并且有一个可行的备用模型可以尝试。

数据库引擎的不同版本根据数据的分布和查询方式使用不同的 CE 模型假设。

工作原理

虽然指纹不是 SQL Server 数据库引擎的新概念,但表达式功能的反馈上下文中的 指纹 是指表达式中计算签名的组合。 例如,虚构业务中的业务分析师可能希望获取有关客户的任何订单的信息,这些客户花费超过 10,000 美元。 涉及从“客户”表和“订单”表收集数据的选择语句可能是查看此类数据的一种方法:

SELECT *
FROM Customer AS C
     INNER JOIN Orders AS O
         ON C.custkey = O.o_custkey
WHERE O.o_totalprice > 10000;

对于此查询,查询优化器可能会选择从每个表 Customer 获取数据,然后 Orders 从这两个表中选择所有相关的列,并在订单的 totalprice 大于 $10,000 时(带有筛选条件)联接这些数据。 此过程中的每个步骤都生成了一个签名,该签名构成表达式功能的反馈使用的指纹。

此功能侧重于跨查询具有一致的基数过度估计/低估的表达式。 它分析目前不符合 CE 反馈条件的两种不同的工作负荷模式:

  • 工作负荷不重复执行,但具有重复的表达式模式。 例如,常用的联接模式。

  • 查询中的某一部分可能会从不同于同一查询中另一部分的 CE 模型中受益。 例如,表 A 和 B 之间的联接可能需要简单包含,而表 C 和 D 之间的联接可能需要基础包含。

表达式功能反馈用于应用筛选器和联接假设来纠正估算错误问题,例如:

筛选器:

  • ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
  • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
  • ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES

加入:

  • ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
  • 基础控制假设(无需传递任何提示)

对表达式使用 CE 反馈

若要为数据库启用表达式功能的反馈,需要满足以下先决条件:

  • 数据库必须使用兼容性级别 160 或更高版本。

  • CE_FEEDBACK_FOR_EXPRESSIONS必须启用数据库范围的配置。

  • 已启用跟踪标志 12005。 这可用作启动或全局跟踪标志,并且仅适用于 SQL Server 2025 预览版。 在 SQL Server 2025 正式版本发布之前,将删除跟踪标记。

默认情况下,数据库 CE_FEEDBACK_FOR_EXPRESSIONS 范围的配置处于启用状态。

可以通过执行以下语句来确保数据库使用 SQL Server 2025 (17.x) 预览版中的表达式功能的反馈:

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;

要禁用数据库中“表达式反馈”这一功能,请禁用 CE_FEEDBACK_FOR_EXPRESSIONS 的数据库范围配置:

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = OFF;
  • 表达式活动的 CE 反馈可以通过 adhoc_ce_feedback_query_level_telemetryquery_adhoc_ce_feedback_expression_hintquery_adhoc_ce_feedback_hint 这些扩展事件查看。 CE 反馈扩展事件 query_ce_feedback_begin_analysisquery_ce_feedback_telemetry 在跟踪功能的活动时也很有用。

  • 有一个新的内存管理器,名为 AdHocCEFeedbackCache,用于缓存指纹数据。 可以通过新的系统目录视图 sys.dm_exec_ce_feedback_cache访问缓存。

局限性

表达式功能的 CE 反馈当前不包含以下功能:

  • 持久性:后续 CTP 中将提供指纹表和表达式级别提示的查询存储持久性。 重启 SQL Server 后,表达式功能的反馈必须重新学习,并将相关提示应用到当前工作负荷中。