SQL 数据库中的智能查询处理
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
智能查询处理 (IQP) 功能系列包含有广泛影响的功能,既能提升现有工作负荷的性能,还能最大限度地减少实现工作量。 下图详细介绍了 IQP 功能系列以及首次在 SQL Server 中引入的时间。 所有 IQP 功能均可在 Azure SQL 托管实例和 Azure SQL 数据库中使用。 某些功能取决于数据库兼容性级别。
观看本视频,大致了解智能查询处理:
有关 GitHub 上智能查询处理 (IQP) 功能的演示和示例代码,请访问 https://aka.ms/IQPDemos。
可以通过对数据库启用适当的数据库兼容性级别使工作负荷自动符合只能查询处理条件。 可使用 Transact-SQL 进行此设置。 例如:
ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 160;
下表详细列出了所有智能查询处理功能,以及针对数据库兼容性级别必须具备的任何要求。 有关所有 IQP 功能的完整详细信息(包括发行说明和更深入的说明),请参阅智能查询处理 (IQP) 功能详细信息。
适用于 Azure SQL 数据库和 SQL Server 2022 (16.x) 的 IQP 功能
IQP 功能 | 在 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 (16.x) 开始,兼容性级别 110 | 快速计算具有基于排名的可接受误差范围的大型数据集的百分位数,以帮助使用近似百分位数聚合函数快速做出决策。 |
行存储上的批处理模式 | 是,从数据库兼容性级别 150 开始 | 是,从 SQL Server 2019 (15.x) 开始,兼容性级别 150 | 可为 CPU 绑定关系的 DW 工作负载提供批处理模式,无需列存储索引。 |
基数估计 (CE) 反馈 | 是,从数据库兼容性级别 160 开始 | 是,从 SQL Server 2022 (16.x) 开始,兼容性级别 160 | 自动调整重复查询的基数估计,以优化低效的 CE 假设导致查询性能不佳的工作负载。 CE 反馈将识别并使用更适合给定查询和数据分布的模型假设,以提高查询执行计划的质量。 |
并行度 (DOP) 反馈 | 是,从数据库兼容性级别 160 开始为预览版 | 是,从 SQL Server 2022 (16.x) 开始,兼容性级别 160 | 自动调整重复查询的并行度,以针对并行度低可能导致性能问题的工作负载进行优化。 需要启用查询存储。 |
交错执行 | 是,从数据库兼容性级别 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 | 通过合并过去的查询执行来优化反馈,以非侵入性方式解决内存授予反馈的现有限制。 |
内存授予反馈持久性 | 是,在所有数据库上启用 | 是,从 SQL Server 2022 (16.x) 开始,数据库兼容性级别 140 | 提供新功能持久保留内存授予反馈。 需要为数据库启用查询存储并处于 READ_WRITE 模式。 |
CE 反馈持久性 | 是,从数据库兼容性级别 160 开始 | 是,从 SQL Server 2022 (16.x) 开始,数据库兼容性级别 160 | 需要为数据库启用查询存储并处于 READ_WRITE 模式。 |
DOP 反馈持久性 | 是,从数据库兼容性级别 160 开始为预览版 | 是,从 SQL Server 2022 (16.x) 开始,数据库兼容性级别 160 | 需要为数据库启用查询存储并处于 READ_WRITE 模式。 |
优化计划强制 | 是 | 是,从 SQL Server 2022 (16.x) 开始。 | 减少了重复强制查询的编译开销。 有关详细信息,请参阅使用查询存储优化计划强制。 |
标量 UDF 内联 | 是,从数据库兼容性级别 150 开始 | 是,从 SQL Server 2019 (15.x) 开始,数据库兼容性级别 150 | 标量 UDF 转换为“内联”在调用查询中的等效关系表达式,这通常会大幅提升性能。 |
参数敏感度计划优化 | 是,从数据库兼容性级别 160 开始 | 是,从 SQL Server 2022 (16.x) 开始,数据库兼容性级别 160 | 参数敏感计划优化解决了参数化查询的单个缓存计划对于所有可能的传入参数值(如非均匀数据分布)都不是最佳方案的情况。 |
表变量延迟编译 | 是,从数据库兼容性级别 150 开始 | 是,从 SQL Server 2019 (15.x) 开始,数据库兼容性级别 150 | 使用首次编译时遇到的表变量的实际基数,而不是固定的猜测值。 |
Azure SQL 托管实例的 IQP 功能
IQP 功能 | 在 Azure SQL 托管实例中受支持 | 说明 |
---|---|---|
自适应联接(批处理模式) | 是,从数据库兼容性级别 140 开始 | 自适应联接在运行时期间根据实际输入行自动选择联接类型。 |
非重复近似计数 | 是 | 由于高性能和低内存占用量,可针对大数据方案提供近似的 COUNT DISTINCT。 |
近似百分位数 | 是,从数据库兼容性级别 110 开始 | 快速计算具有基于排名的可接受误差范围的大型数据集的百分位数,以帮助使用近似百分位数聚合函数快速做出决策。 |
行存储上的批处理模式 | 是,从数据库兼容性级别 150 开始 | 可为 CPU 绑定关系的 DW 工作负载提供批处理模式,无需列存储索引。 |
基数估计 (CE) 反馈 | 是,从数据库兼容性级别 160 开始 | 自动调整重复查询的基数估计,以优化低效的 CE 假设导致查询性能不佳的工作负载。 CE 反馈将识别并使用更适合给定查询和数据分布的模型假设,以提高查询执行计划的质量。 |
并行度 (DOP) 反馈 | 无 | 自动调整重复查询的并行度,以针对并行度低可能导致性能问题的工作负载进行优化。 需要启用查询存储。 |
交错执行 | 是,从数据库兼容性级别 140 开始 | 使用首次编译时遇到的多语句表值函数的实际基数,而不是固定的猜测值。 |
内存授予反馈(批处理模式) | 是,从数据库兼容性级别 140 开始 | 如果批处理模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。 |
内存授予反馈(行模式) | 是,从数据库兼容性级别 150 开始 | 如果行模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。 |
内存授予反馈(百分位数) | 无 | 通过合并过去的查询执行来优化反馈,以非侵入性方式解决内存授予反馈的现有限制。 |
内存授予、CE 和 DOP 反馈持久性 | 是,从数据库兼容性级别 160 开始 | 提供新功能持久保留内存授予反馈。 CE 和 DOP 反馈始终保留。 需要为数据库启用查询存储并处于 READ_WRITE 模式。 |
优化计划强制 | 无 | 减少了重复强制查询的编译开销。 有关详细信息,请参阅使用查询存储优化计划强制。 |
标量 UDF 内联 | 是,从数据库兼容性级别 150 开始 | 标量 UDF 转换为“内联”在调用查询中的等效关系表达式,这通常会大幅提升性能。 |
参数敏感度计划优化 | 是,从数据库兼容性级别 160 开始 | 参数敏感度计划优化解决了参数化查询的单个缓存计划对于所有可能的传入参数值(如非均匀数据分布)都不是最佳方案的情况。 |
表变量延迟编译 | 是,从数据库兼容性级别 150 开始 | 使用首次编译时遇到的表变量的实际基数,而不是固定的猜测值。 |
SQL Server 2019 (15.x) 的 IQP 功能
IQP 功能 | 在 SQL Server 2019 (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) 中受支持 | 说明 |
---|---|---|
自适应联接(批处理模式) | 是,从 SQL Server 2017 (14.x) 开始,数据库兼容性级别 140 | 自适应联接在运行时期间根据实际输入行自动选择联接类型。 |
非重复近似计数 | 是 | 由于高性能和低内存占用量,可针对大数据方案提供近似的 COUNT DISTINCT。 |
交错执行 | 是,从数据库兼容性级别 140 开始 | 请使用在首次编译时遇到的多语句表值函数的实际基数,而不是一个固定猜测值。 |
内存授予反馈(批处理模式) | 是,从数据库兼容性级别 140 开始 | 如果批处理模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。 |
查询存储要求
智能查询处理功能套件中的几个功能要求启用查询存储,以便用户数据库使用。 要启用查询存储,请参阅启用查询存储。
IQP 功能 | 要求启用查询存储并处于 READ_WRITE 模式 |
---|---|
自适应联接(批处理模式) | 否 |
非重复近似计数 | 否 |
近似百分位数 | 否 |
行存储上的批处理模式 | 否 |
基数估计 (CE) 反馈 | 是 |
并行度 (DOP) 反馈 | 是 |
交错执行 | 否 |
内存授予反馈(批处理模式) | 否 |
内存授予反馈(行模式) | 否 |
内存授予反馈(百分位数和持久性模式) | 是 |
优化计划强制 | 是 |
标量 UDF 内联 | 否 |
参数敏感度计划优化 | 否,但建议使用 |
表变量延迟编译 | 否 |
相关内容
有关所有 IQP 功能的完整详细信息(包括发行说明和更深入的说明),请参阅智能查询处理 (IQP) 功能详细信息。