适用于: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_telemetry
、query_adhoc_ce_feedback_expression_hint
和query_adhoc_ce_feedback_hint
这些扩展事件查看。 CE 反馈扩展事件query_ce_feedback_begin_analysis
,query_ce_feedback_telemetry
在跟踪功能的活动时也很有用。有一个新的内存管理器,名为
AdHocCEFeedbackCache
,用于缓存指纹数据。 可以通过新的系统目录视图sys.dm_exec_ce_feedback_cache
访问缓存。
局限性
表达式功能的 CE 反馈当前不包含以下功能:
- 持久性:后续 CTP 中将提供指纹表和表达式级别提示的查询存储持久性。 重启 SQL Server 后,表达式功能的反馈必须重新学习,并将相关提示应用到当前工作负荷中。