2009-05-04 48 views
46

使用Sql Server 2005 Profiler,可以跟踪哪些事件,列和过滤器来查找最慢的查询和存储过程?如何查找最慢的查询

慢=大于N秒,为了论证起见,为10。

+0

定义“慢”。尽管查询速度可能很慢,但这只与所做的呼叫次数以及是否为关键性有关。 – Lucero 2009-05-04 13:59:56

回答

77

在SQL 2005中,您可以使用管理视图来查找slow running queries。我不久前在SQL server performance上发现的一个很好的脚本将帮助您开始;它列出了性能最慢的数据。

SELECT creation_time 
     ,last_execution_time 
     ,total_physical_reads 
     ,total_logical_reads 
     ,total_logical_writes 
     , execution_count 
     , total_worker_time 
     , total_elapsed_time 
     , total_elapsed_time/execution_count avg_elapsed_time 
     ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, 
     ((CASE statement_end_offset 
      WHEN -1 THEN DATALENGTH(st.text) 
      ELSE qs.statement_end_offset END 
      - qs.statement_start_offset)/2) + 1) AS statement_text 
FROM sys.dm_exec_query_stats AS qs 
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st 
ORDER BY total_elapsed_time/execution_count DESC; 
+1

你知道时间的度量单位:total_worker_time,total_elapsed_time和avg_elapsed_time吗? – 2009-05-04 14:18:45

+4

时间以微秒为单位; MSDN在管理视图上有很好的细分http://msdn.microsoft.com/en-us/library/ms189741.aspx – u07ch 2009-05-04 14:37:42

3

持续时间栏为我做了,但有时我也看看读取和写入列。

我使用TSQL:StmtCompleted过滤器来获取原始查询。您可能希望将其他存储过程添加到其中,但tsql是您需要查看的“基础”。由于MSDN article

“存储过程 的执行可以由SP进行监控:开始, SP:StmtStarting,SP:StmtCompleted事件,并 SP:Completed事件类和所有 TSQL事件类“。

10

在我使用profiler之前,我检查了内置的使用情况报告。右键单击数据库,Reports,Standard Reports,然后是Object Execution Statistics。

它列出了当前缓存的执行计划以及资源数量和运行次数。这通常给出了一个关于什么使服务器保持繁忙的非常好的想法。