优先级 SQL 服务器 dm_exec_procedure_stats 的指标

Metric for prioritising SQL SERVER dm_exec_procedure_stats

这个查询提供了很多有用的信息,但我需要想出一个好的指标来确定数据的优先级。谁能为 ORDER BY 子句想出一个理想的顺序?

我猜计算优先顺序的关键字段是 [execution_count]、[total_worker_time]、[total_physical_reads] 和 [total_logical_writes]

SELECT 
    DB_NAME(database_id)               databaes_name
    ,p.name                                 proc_name
    ,p.type                                 proc_type
    ,d.object_id
    ,d.type
    ,d.type_desc
    --,d.sql_handle
    --,d.plan_handle
    ,d.cached_time
    ,d.last_execution_time
    ,d.execution_count
    ,d.total_worker_time
    ,d.last_worker_time
    ,d.min_worker_time
    ,d.max_worker_time
    ,d.total_physical_reads
    ,d.last_physical_reads
    ,d.min_physical_reads
    ,d.max_physical_reads
    ,d.total_logical_writes
    ,d.last_logical_writes
    ,d.min_logical_writes
    ,d.max_logical_writes
    ,d.total_logical_reads
    ,d.last_logical_reads
    ,d.min_logical_reads
    ,d.max_logical_reads
    ,d.total_elapsed_time
    ,d.last_elapsed_time
    ,d.min_elapsed_time
    ,d.max_elapsed_time
FROM   
    sys.procedures p
        JOIN sys.dm_exec_procedure_stats d
            ON 
            p.object_id = d.object_id
WHERE  
    d.database_id = Db_id() 

任何人都可以建议我应该查看的额外 DMV 以确定我最昂贵的存储过程是什么吗?

这篇文章是关于这个主题的好读物。 Simple-Talk

但是为了回答你的问题,我建议使用这个:

ORDER BY AVG_LOGICAL_READS DESC

通过这样做,您可以看到哪个过程在每次执行中完成了最合乎逻辑的 I/O。

您也应该看看这个,即使它特定于查询与过程。它有大量与该主题相关的信息。 SQL Authority Most Expensive Queries 它包括这个片段:

SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC -- logical reads
-- ORDER BY qs.total_logical_writes DESC -- logical writes
-- ORDER BY qs.total_worker_time DESC -- CPU time