讲师中心 微信公众号
AI工具推荐 视频效率加速

SQL Server 2022中存储过程如何利用智能查询处理优化

冬晨同学_5248

冬晨同学_5248

发布时间:2026-09-09 09:35:20

|

821人浏览过

|

来源于php中文网

原创

SQL Server 2022的智能查询处理(IQP)对存储过程开箱即用但非全自动,需满足统计信息及时、参数化谓词、兼容级别≥160、启用PARAMETER_SENSITIVE_PLAN等条件;PSP最多作用于前三个高风险谓词,验证需查query_store_plan中ParameterSensitivePlan与QueryVariant标识。

sql server 2022中存储过程如何利用智能查询处理优化

SQL Server 2022 的智能查询处理(IQP)对存储过程是开箱即用的,但**不会自动生效于所有场景**——它依赖统计信息质量、参数化行为、查询结构和数据库级开关配置。盲目启用或忽略细节反而可能引入计划缓存膨胀或变体选择偏差。

参数敏感计划(PSP)是否自动作用于存储过程

是,但有前提:存储过程中的查询必须满足参数敏感性判定条件,且数据库启用了 PARAMETER_SENSITIVE_PLAN(默认关闭)。SQL Server 不会因为它是 CREATE PROCEDURE 就特殊对待;它只看内部 T-SQL 是否含参数化谓词、列直方图是否显示非均匀分布。

  • 必须使用参数(如 @StatusID),不能拼接字符串或用局部变量绕过参数嗅探检测
  • 对应列(如 StatusID)需有更新及时的统计信息,且直方图桶(steps)中存在明显倾斜(例如某值占 95% 行数)
  • 数据库兼容级别必须 ≥ 160(即 SQL Server 2022),且未显式禁用 IQP:ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SENSITIVE_PLAN = ON;
  • 同一查询中最多只对前三个谓词启用 PSP,优先选高风险谓词(如 WHERE StatusID = @x AND CreatedDate > @y 中可能只选 StatusID

如何验证存储过程是否生成了多个查询变体

不能只看 sys.dm_exec_query_stats 或 SSMS 执行计划窗口——它们只显示当前缓存的“调度计划”(scheduler plan),不直接暴露变体。要确认 PSP 实际起效,得查底层元数据:

  • 执行存储过程几次,传入明显不同分布的参数值(如 @StatusID = 1 vs @StatusID = 99
  • 运行:
    SELECT 
      qsp.query_id,
      qsp.plan_id,
      qsp.is_forced_plan,
      qsp.count_compiles,
      qsp.avg_compile_duration_ms,
      CAST(qsp.query_plan AS XML) AS query_plan_xml
    FROM sys.query_store_plan qsp
    JOIN sys.query_store_query qsq ON qsp.query_id = qsq.query_id
    WHERE qsq.object_id = OBJECT_ID('dbo.GetOrdersByStatus');
  • 在返回的 query_plan_xml 中搜索 ParameterSensitivePlanQueryVariant 字样;若存在多个 plan_idcount_compiles > 1,说明已生成变体
  • 注意:若启用了查询存储但未设为 READ_WRITE 模式,这些记录不会持久化

OPTION (RECOMPILE) 与 PSP 的冲突关系

二者互斥:OPTION (RECOMPILE) 会完全跳过计划缓存,自然也绕过了 PSP 的调度逻辑。PSP 的价值恰恰在于「复用+分叉」——既避免每次重编译开销,又解决单计划低效问题。

  • 已有 OPTION (RECOMPILE) 的存储过程,PSP 不起作用;迁移时需先移除该提示
  • 若业务要求强一致性(如报表导出必须用最新统计),RECOMPILE 仍更可控;PSP 是面向 OLTP 高频、低延迟场景的折中方案
  • 混合使用危险:WHERE StatusID = @x OPTION (RECOMPILE) 会导致 PSP 谓词识别失败,整个查询退出 PSP 流程
  • 替代方案:用 OPTIMIZE FOR (@x = UNKNOWN) 保留缓存,但失去 PSP 的自适应能力

自动索引建议对存储过程的实际影响

自动索引(CREATE_INDEX = ON)不区分调用来源,只要它观察到存储过程内某查询反复触发全表扫描 + 高逻辑读,就可能生成索引建议。但关键点在于:

  • 建议基于历史执行统计,不是实时分析;首次运行存储过程不会立刻触发建议
  • 若存储过程含动态 SQL(EXEC(@sql)),其内部语句可能无法被自动索引模块捕获——因为解析发生在运行时,且无稳定对象引用
  • 生成的索引名形如 auto_created_index_..._on_dbo_Orders,不带业务语义;上线前必须人工审核列顺序、包含列、是否唯一等
  • 黑名单机制有效:EXEC sp_automatic_tuning_set_blacklist @schema_name='dbo', @table_name='Orders', @object_type='TABLE'; 可阻止对核心表的自动干预

PSP 和自动索引都不是“设完就跑”的黑盒功能——它们依赖统计信息鲜度、查询写法规范、以及足够多的真实负载样本。最常被忽略的是:在测试环境开启 PSP 后,不主动用不同参数值触发多次执行,就误以为“没生效”。实际中,一个变体可能要等三次符合基数范围的调用才会落地缓存。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

3956

2023.06.21

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

1209

2025.12.08

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

203

2026.01.05

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

426

2026.01.05

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

4311

2023.08.11

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2225

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

3601

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2351

2023.08.31

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

0

2026.09.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn