2010-02-23 101 views
5

我有超过3天的应用程序。 我可以在日志中看到有一段时间应用程序执行了一些SQL查询,这花了很多时间,可能是因为某些数据库锁。如何查找花费大量时间的SQL Server查询?

我听说有这种情况的查询。所以我需要能够询问所有查询,例如超过30分钟。可能吗?

回答

7

试试这个:

SELECT TOP 10 
    total_worker_time/execution_count AS Avg_CPU_Time 
     ,execution_count 
     ,total_elapsed_time/execution_count as AVG_Run_Time 
     ,(SELECT 
       SUBSTRING(text,statement_start_offset/2,(CASE 
                  WHEN statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), text)) * 2 
                  ELSE statement_end_offset 
                 END -statement_start_offset)/2 
         ) FROM sys.dm_exec_sql_text(sql_handle) 
     ) AS query_text 
FROM sys.dm_exec_query_stats 
ORDER BY AVG_Run_Time DESC 
+0

这通常会是一个快速和简单的答案。然而,并非所有获得缓存的内容都保持缓存。如果execution_count似乎不在正确的位置,请注意。 – VoiceOfUnreason 2010-03-04 19:55:08

1

使用SQL Server Profiler

+1

更具体 – kenwarner 2010-03-04 19:22:07

0

您可以使用SQL Server Profiler(您可以选择与SQL Server本身一起安装的独立工具)。

它有一个向导,您可以使用它来为长时间运行的查询设置跟踪。

0

在SQL Server Management Studio中,连接到你的服务器。然后,在对象资源管理器中右键单击服务器名称,然后单击“活动监视器”。 “最近昂贵的查询”会告诉你很多你想知道的内容。尝试双击其中一个查询,而你在那里。