用途:这是一个分诊而非修复技能,把“查询很慢”转成四类标签之一(volatile、blocked、regressed、growing),再交给回答该标签的技能;读计划 XML、抓事件会话属于其他技能。
主要能力与用法:
- 先看当下:查 sys.dm_exec_requests,若 blocking_session_id 非 0,转 diagnose-blocking-and-deadlocks。
- 定位查询:用 sys.query_store_query/query_text/plan 按裸对象名 LIKE 搜索;注释标签在每次捕获时都被剥离,字面量与方括号是否保留取决于是否被参数化重写。
- 判断 volatile:用 sys.query_store_runtime_stats 按 plan 计算变异系数(stdev_duration/avg_duration),execution_type=0 排除中止与异常执行,仅用于排序而非阈值。
- 判断 regressed:同一 query_id 多个 plan_id 时,按 count_executions 加权比较;较早计划更好可用 sys.sp_query_store_force_plan 强制,之后可 unforce。
- 判断 growing:同一 plan_id 跨 interval 比较 avg_duration 与 avg_logical_io_reads,同步上升说明数据增长而非计划变化。
- 路由:用 sys.query_store_wait_stats 按 wait_category_desc 汇总,Lock/Latch/Buffer Latch 转阻塞诊断,CPU/Memory/Buffer IO/Tran Log IO 转资源压力诊断,无主导类别且计划可疑转读执行计划。
验证:强制计划后重跑并查 is_forced_plan、force_failure_count、last_force_failure_reason(8712 NO_INDEX、8698 NO_PLAN、8690 HINT_CONFLICT);再用 sp_query_store_flush_db 后比较新旧 interval 的 avg_duration(微秒)。
限制与注意:Query Store 默认开启但不完整,AUTO 模式会忽略低频与低耗时查询,缺失不等于查询正常;需先读 sys.database_query_store_options 的 query_capture_mode_desc,必要时临时设 ALL 或 CUSTOM 并告知库所有者。READ_ONLY 的 readonly_reason 65536/131072/524288 分别对应容量、内存、空间限制。sys.dm_exec_query_stats 不能作为兜底真相。读取这些视图需 VIEW DATABASE STATE。不要在此诊断资源压力、阻塞链或逐算子读计划;不要事后保留 ALL 捕获模式。资料未提供收费、价格与平台支持信息。