【发布时间】:2010-10-23 15:25:25
【问题描述】:
使用 Sql Server 2005 Profiler,您跟踪哪些事件、列和过滤器来查找最慢的查询和存储过程?
慢 = 大于 N 秒,10 用于争论。
【问题讨论】:
-
定义“慢”。虽然查询可能很慢,但这仅与调用次数以及这些调用是否重要有关。
标签: sql-server sql-server-2005 profiling
使用 Sql Server 2005 Profiler,您跟踪哪些事件、列和过滤器来查找最慢的查询和存储过程?
慢 = 大于 N 秒,10 用于争论。
【问题讨论】:
标签: sql-server sql-server-2005 profiling
在 SQL 2005 中,您可以使用管理视图来查找运行缓慢的查询。我不久前在SQL server performance 上找到的一个好脚本将帮助您入门;它首先列出性能最慢的数据。
SELECT creation_time
,last_execution_time
,total_physical_reads
,total_logical_reads
,total_logical_writes
, execution_count
, total_worker_time
, total_elapsed_time
, total_elapsed_time / execution_count avg_elapsed_time
,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY total_elapsed_time / execution_count DESC;
【讨论】:
在使用分析器之前,我会检查内置的使用报告。右键单击数据库、报告、标准报告,然后单击对象执行统计信息。
它列出了当前缓存的执行计划,以及资源数量和运行次数。这通常可以很好地了解导致服务器忙碌的原因。
【讨论】:
duration 列为我做了这件事,但有时我也会查看 reads 和 writes 列。
我使用 TSQL:StmtCompleted 过滤器来获取原始查询。您可能想向其中添加其他存储过程,但 tsql 是您需要查看的“基础”。正如MSDN article 所说
"存储过程的执行 可以通过 SP 监控:启动, SP:StmtStarting、SP:StmtCompleted 和 SP:完成的事件类和所有的 TSQL 事件类。”
【讨论】: