如何获取 SQL Server 中特定对象的前 5 个高效查询计划

问题描述 投票:0回答:1

我正在尝试分析 SQL Server 中特定对象的不同查询执行计划的性能。我的目标是检索前 5 个最有效的查询计划,以便我可以手动比较它们并选择最好的一个来强制执行。

背景 数据库:SQL Server 对象:[指定存储过程] 当前的方法:我一直在使用查询存储功能,但我不确定如何有效地过滤和排名计划。

我尝试过的 我尝试使用以下 SQL 查询来检索执行计划,但没有得到所需的结果:

 SELECT OBJECT_NAME(object_id), qp.plan_id, qt.query_sql_text, q.query_id, q.query_text_id,
      qp.query_plan, q.avg_compile_memory_kb / 1024 AS avg_compile_memory_mb, q.last_execution_time
FROM sys.query_store_query_text qt
INNER JOIN sys.query_store_query q ON qt.query_text_id = q.query_text_id
INNER JOIN sys.query_store_plan qp ON qp.query_id = q.query_id
WHERE ISNULL(OBJECT_NAME(q.object_id), 'N/A') = 'axsp_upd_credit_utilisation2'  -- Filter for specific object
  AND qt.query_sql_text LIKE '%(@includeResidualValue bit%' 
ORDER BY q.last_execution_time DESC;

问题

  1. 我如何修改这个查询以确保我获取最多的 基于多个绩效指标的高效计划?
  2. 是否有我应该考虑添加的特定条件或过滤器 有效缩小结果范围?
  3. 一旦我有了具体的执行计划,最好的方法是什么? 确定了最有效的一个?

附加信息 我正在寻找 SQL Server 中有关执行计划分析的最佳实践。 任何有关为此目的有效使用查询存储的见解将不胜感激。

sql-server query-optimization sql-execution-plan sql-query-store
1个回答
0
投票

您可以使用

sys.query_store_runtime_stats
视图 获取每个计划的运行时统计信息。例如,您可以通过
avg_duration
列进行订购。

SELECT
  o.name,
  qp.plan_id,
  qt.query_sql_text,
  q.query_id,
  q.query_text_id,
  qp.query_plan,
  q.avg_compile_memory_kb / 1024 AS avg_compile_memory_mb,
  q.last_execution_time,
  qsr.*
FROM sys.query_store_query_text qt
JOIN sys.query_store_query q ON qt.query_text_id = q.query_text_id
JOIN sys.query_store_plan qp ON qp.query_id = q.query_id
JOIN sys.query_store_runtime_stats qsr ON qsr.plan_id = qp.plan_id
JOIN sys.objects o ON o.object_id = q.object_id
WHERE o.name = 'axsp_upd_credit_utilisation2'  -- Filter for specific object
  AND qt.query_sql_text LIKE '%(@includeResidualValue bit%' 
ORDER BY
  q.query_id,
  sqr.execution_type,  -- regular exec first
  sqr.avg_duration;
© www.soinside.com 2019 - 2024. All rights reserved.