SQL 数据库中的智能查询处理

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

智能查询处理 (IQP) 功能系列包含有广泛影响的功能,既能提升现有工作负荷的性能,还能最大限度地减少实现工作量。 下图详细介绍了 IQP 功能系列,以及首次为SQL Server引入这些功能。 Azure SQL 托管实例 和 Azure SQL 数据库中提供了所有 IQP 功能。 某些功能取决于数据库的兼容性级别。

显示智能查询处理系列功能及其首次引入 SQL Server 的时间的示意图。

本视频时长 6 分钟,请观看本视频大致了解智能查询处理:

有关 GitHub 上智能查询处理 (IQP) 功能的演示和示例代码,请访问 https://aka.ms/IQPDemos

可以通过对数据库启用适当的数据库兼容性级别使工作负荷自动符合只能查询处理条件。 可使用 Transact-SQL 进行此设置。 例如:

ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 150;

下表详细列出了所有智能查询处理功能,以及针对数据库兼容性级别必须具备的任何要求。 有关所有 IQP 功能的完整详细信息(包括发行说明和更深入的说明),请参阅 智能查询处理 (IQP) 功能详细信息

适用于 Azure SQL Database、Azure SQL 托管实例 SQL Server 2022 (16.x) 的 IQP 功能

IQP 功能 在 Azure SQL 数据库 和 Azure SQL 托管实例 中受支持 在 SQL Server 2022 (16.x) 中受支持 说明
自适应联接(批处理模式) 是,从数据库兼容性级别 140 开始 是,从 SQL Server 2017 开始, (14.x) ,数据库兼容性级别为 140 自适应联接在运行时期间根据实际输入行自动选择联接类型。
非重复近似计数 是,自 SQL Server 2019 (15.x) 起 由于高性能和低内存占用量,可针对大数据方案提供近似的 COUNT DISTINCT。
近似百分位数 是,从数据库兼容性级别 110 开始 是,从 SQL Server 2022 开始, (兼容级别为 110 的 16.x) 快速计算具有基于排名的可接受误差范围的大型数据集的百分位数,以帮助使用近似百分位数聚合函数快速做出决策。
行存储上的批处理模式 是,从数据库兼容性级别 150 开始 是,从 SQL Server 2019 开始, (兼容级别 150 的 15.x) 可为 CPU 绑定关系的 DW 工作负载提供批处理模式,无需列存储索引。
CE) 反馈 (基数估计 是,从 SQL Server 2022 开始, (兼容级别 160 的 16.x) 自动调整重复查询的基数估计,以优化低效 CE 假设导致查询性能不佳的工作负荷。 CE 反馈将识别并使用更适合给定查询和数据分布的模型假设,以提高查询执行计划的质量。
DOP) 反馈 (并行度 是*,从数据库兼容性级别 160 开始。 是,从 SQL Server 2022 开始, (兼容级别 160 的 16.x) 自动调整重复查询的并行度,以针对低效并行可能导致性能问题的工作负荷进行优化。 需要启用查询存储。
交错执行 是,从数据库兼容性级别 140 开始 是,从 SQL Server 2017 开始, (14.x) ,数据库兼容性级别为 140 使用首次编译时遇到的多语句表值函数的实际基数,而不是固定的猜测。
批处理模式) (内存授予反馈 是,从数据库兼容性级别 140 开始 是,从 SQL Server 2017 开始, (14.x) ,数据库兼容性级别为 140 如果批处理模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费 > 了分配给它的 50% 内存,请减小连续执行的内存授予大小。
行模式) (内存授予反馈 是,从数据库兼容性级别 150 开始 是,从 SQL Server 2019 开始, (15.x) ,数据库兼容性级别为 150 如果行模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费 > 了分配给它的 50% 内存,请减小连续执行的内存授予大小。
内存授予反馈 (百分位) 是,从 SQL Server 2022 (16.x) ) 开始,数据库兼容性级别为 140 通过合并过去的查询执行来优化反馈,以非侵入性方式解决内存授予反馈的现有限制。
内存授予、CE 和 DOP 反馈持久性 是,从 SQL Server 2022 (16.x) ) 开始,数据库兼容性级别为 140 提供新功能来保留内存授予反馈。 CE 和 DOP 反馈始终保持不变。 要求在READ_WRITE模式下为数据库启用查询存储。
优化了计划强制 是,从 SQL Server 2022 (16.x) ) 开始。 减少重复强制查询的编译开销。 有关详细信息,请参阅使用查询存储强制执行优化计划
标量 UDF 内联 是,从数据库兼容性级别 150 开始 是,从 SQL Server 2019 开始, (15.x) ,数据库兼容性级别为 150 标量 UDF 转换为“内联”在调用查询中的等效关系表达式,这通常会大幅提升性能。
参数敏感度计划优化 是, (从 SQL Server 2022 (16.x) ) 开始,数据库兼容性级别为 160 参数敏感度计划优化解决了参数化查询的单个缓存计划不适用于所有可能的传入参数值的情况,例如非一致性数据分布。
表变量延迟编译 是,从数据库兼容性级别 150 开始 是,从 SQL Server 2019 开始, (15.x) ,数据库兼容性级别为 150 使用第一次编译时遇到的表变量的实际基数,而不是固定的猜测。

适用于 SQL Server 2019 (15.x) 的 IQP 功能

IQP 功能 在 2019 SQL Server (15.x) 中受支持 说明
自适应联接(批处理模式) 是,从 SQL Server 2017 开始, (14.x) ,数据库兼容性级别为 140 自适应联接在运行时期间根据实际输入行自动选择联接类型。
非重复近似计数 由于高性能和低内存占用量,可针对大数据方案提供近似的 COUNT DISTINCT。
行存储上的批处理模式 是,从数据库兼容性级别 150 开始 可为 CPU 绑定关系的 DW 工作负载提供批处理模式,无需列存储索引。
交错执行 是,从数据库兼容性级别 140 开始 请使用在首次编译时遇到的多语句表值函数的实际基数,而不是一个固定猜测值。
批处理模式) (内存授予反馈 是,从数据库兼容性级别 140 开始 如果批处理模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费 > 了分配给它的 50% 内存,请减小连续执行的内存授予大小。
行模式) (内存授予反馈 是,从数据库兼容性级别 150 开始 如果行模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费 > 了分配给它的 50% 内存,请减小连续执行的内存授予大小。
标量 UDF 内联 是,从数据库兼容性级别 150 开始 标量 UDF 转换为“内联”在调用查询中的等效关系表达式,这通常会大幅提升性能。
表变量延迟编译 是,从数据库兼容性级别 150 开始 请使用在首次编译时遇到的表变量的实际基数,而不是一个固定猜测值。

适用于 SQL Server 2017 (14.x) 的 IQP 功能

IQP 功能 SQL Server 2017 (14.x) 支持 说明
自适应联接(批处理模式) 是,从 2017 SQL Server开始, (14.x) ,数据库兼容性级别为 140 自适应联接在运行时期间根据实际输入行自动选择联接类型。
非重复近似计数 由于高性能和低内存占用量,可针对大数据方案提供近似的 COUNT DISTINCT。
交错执行 是,从数据库兼容性级别 140 开始 请使用在首次编译时遇到的多语句表值函数的实际基数,而不是一个固定猜测值。
批处理模式) (内存授予反馈 是,从数据库兼容性级别 140 开始 如果批处理模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费 > 了分配给它的 50% 内存,请减小连续执行的内存授予大小。

查询存储要求

一些智能查询处理功能套件需要启用查询存储,以便使用户数据库受益。 若要启用查询存储,请参阅启用查询存储

IQP 功能 需要启用查询存储并READ_WRITE
自适应联接(批处理模式)
非重复近似计数
近似百分位数
行存储上的批处理模式
ce) 反馈 (基数估计
DOP) 反馈 (并行度
交错执行
批处理模式) (内存授予反馈 部分
行模式) (内存授予反馈 部分
内存授予反馈 (百分位)
内存授予、CE 和 DOP 反馈持久性
优化了计划强制
标量 UDF 内联
参数敏感度计划优化 否,但建议使用
表变量延迟编译

另请参阅

有关所有 IQP 功能的完整详细信息(包括发行说明和更深入的说明),请参阅 智能查询处理 (IQP) 功能详细信息

后续步骤