我有超过3天的应用程序。 我可以在日志中看到有一段时间应用程序执行了一些SQL查询,这花了很多时间,可能是因为某些数据库锁。如何查找花费大量时间的SQL Server查询?
我听说有这种情况的查询。所以我需要能够询问所有查询,例如超过30分钟。可能吗?
我有超过3天的应用程序。 我可以在日志中看到有一段时间应用程序执行了一些SQL查询,这花了很多时间,可能是因为某些数据库锁。如何查找花费大量时间的SQL Server查询?
我听说有这种情况的查询。所以我需要能够询问所有查询,例如超过30分钟。可能吗?
试试这个:
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
您可以使用SQL Server Profiler(您可以选择与SQL Server本身一起安装的独立工具)。
它有一个向导,您可以使用它来为长时间运行的查询设置跟踪。
您可以通过查询动态管理视图实现它。 SQL Server 2005 Performance Dashboard Reports也会揭示(实际上它们是基于dmv)大量有用的性能相关信息。
请记住,当您重新启动sql server时,上述信息将丢失。
在SQL Server 2008中您可以使用Data Collector
在SQL Server Management Studio中,连接到你的服务器。然后,在对象资源管理器中右键单击服务器名称,然后单击“活动监视器”。 “最近昂贵的查询”会告诉你很多你想知道的内容。尝试双击其中一个查询,而你在那里。
这通常会是一个快速和简单的答案。然而,并非所有获得缓存的内容都保持缓存。如果execution_count似乎不在正确的位置,请注意。 – VoiceOfUnreason 2010-03-04 19:55:08