如何找到最慢的查询

时间:2009-05-04 13:57:40

标签: sql-server sql-server-2005 profiling

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

慢=大于N秒,为了争论10。

3 个答案:

答案 0 :(得分:91)

在SQL 2005中,您可以使用管理视图查找运行缓慢的查询。我刚才在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 :(得分:12)

在使用Profiler之前,我会检查内置使用情况报告。右键单击数据库,“报告”,“标准报告”,然后单击“对象执行统计”。

它列出了当前缓存的执行计划,以及资源量和运行次数。这通常可以很好地了解保持服务器忙碌的原因。

答案 2 :(得分:4)

持续时间列为我做了,但有时我也会查看读写列。

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

  

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