2016-12-07 55 views
1

该查询提供了大量有用的信息,但是我需要为优先级数据提供一个很好的度量标准。任何人都可以想出ORDER BY子句的理想顺序吗?优先级SQL SERVER的度量指标dm_exec_procedure_stats

我猜测的重点领域为计算的优先顺序将是[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我应该是想看看我最昂贵的存储过程是什么?

+0

什么版本的SQL Server? –

+0

我目前正在寻找2008R2。 – pacreely

回答

0

这篇文章是关于这个问题的很好的阅读。 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 
+0

当我分析dm_db_missing_index_xxx时,我使用ORDER BY [avg_total_user_cost] * [avg_user_impact] *([user_seeks] + [user_scans])DESC。你有什么建议吗? – pacreely

+0

看看使用AVG_ESTIMATED_IMPACT。看看这个失踪索引的更多细节http://blog.sqlauthority.com/2011/01/03/sql-server-2008-missing-index-script-download/希望这将是服务于你。 –