如何查找执行时间较长的SQL Server查询?

5

我有一个运行了三天以上的应用程序。从日志中我可以看到,这个应用程序执行了一些 SQL 查询,并且由于某些数据库锁定,这个查询花费了很长时间。

我听说针对这种情况有一种查询方法。所以我需要能够查询所有执行时间超过 30 分钟的查询。这是否可能?

5个回答

8

试试这个:

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

这通常会是一个快速且简单的答案。然而,并非所有被缓存的内容都会保留在缓存中。如果执行计数似乎不在正确的范围内,请保持警惕。 - VoiceOfUnreason

1

使用 SQL Server Profiler


0

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

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


0

您可以通过查询动态管理视图来实现。SQL Server 2005性能仪表板报告也会显示(实际上它们是基于dmv的)许多有用的性能相关信息。

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

在SQL Server 2008中,您可以使用数据收集器


0
在SQL Server Management Studio中,连接到您的服务器。然后,在对象资源管理器中右键单击服务器名称,选择“活动监视器”。 “最近昂贵的查询”将告诉您大部分想要了解的内容。当您在那里时,请尝试双击其中一个查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,