如何查找花费大量时间的SQL Server查询?

时间:2010-02-23 13:40:58

标签: sql sql-server

我的申请时间超过3天。 我可以在日志中看到应用程序执行一些SQL查询的时刻,这花了很多时间,可能是因为一些数据库锁。

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

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用 SQL Server Profiler

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您可以通过查询动态管理视图来实现它。 SQL Server 2005 Performance Dashboard Reports还将揭示(实际上它们基于dmv)许多有用的性能相关信息。

请记住,当您重新启动sql server时,上述信息将丢失。

在sql server 2008中,您可以使用Data Collector

答案 4 :(得分:0)

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