我有一个运行了三天以上的应用程序。从日志中我可以看到,这个应用程序执行了一些 SQL 查询,并且由于某些数据库锁定,这个查询花费了很长时间。
我听说针对这种情况有一种查询方法。所以我需要能够查询所有执行时间超过 30 分钟的查询。这是否可能?
我有一个运行了三天以上的应用程序。从日志中我可以看到,这个应用程序执行了一些 SQL 查询,并且由于某些数据库锁定,这个查询花费了很长时间。
我听说针对这种情况有一种查询方法。所以我需要能够查询所有执行时间超过 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 Profiler(一个独立的工具,您可以选择与SQL Server一起安装)。
它有一个向导,您可以使用它来设置长时间运行查询的跟踪。
您可以通过查询动态管理视图来实现。SQL Server 2005性能仪表板报告也会显示(实际上它们是基于dmv的)许多有用的性能相关信息。
请记住,当您重新启动SQL Server时,上述信息将丢失。
在SQL Server 2008中,您可以使用数据收集器。