我正在尝试分析 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;
问题
附加信息 我正在寻找 SQL Server 中有关执行计划分析的最佳实践。 任何有关为此目的有效使用查询存储的见解将不胜感激。
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;