Sql server 如何查找最慢的查询
使用SQLServer2005Profiler,您跟踪哪些事件、列和筛选器来查找最慢的查询和存储过程Sql server 如何查找最慢的查询,sql-server,sql-server-2005,profiling,Sql Server,Sql Server 2005,Profiling,使用SQLServer2005Profiler,您跟踪哪些事件、列和筛选器来查找最慢的查询和存储过程 Slow=大于N秒,为便于论证,为10秒。duration列为我做了这项工作,但有时我也会查看reads和write列 我使用TSQL:StmtCompleted过滤器来获取原始查询。您可能希望向其中添加其他存储过程,但tsql是您需要查看的“基础”。正如上面所说的 “存储过程的执行 可由SP监控:启动, SP:StmtStarting、SP:StmtCompleted和 SP:已完成的事件类和
Slow=大于N秒,为便于论证,为10秒。duration列为我做了这项工作,但有时我也会查看reads和write列 我使用TSQL:StmtCompleted过滤器来获取原始查询。您可能希望向其中添加其他存储过程,但tsql是您需要查看的“基础”。正如上面所说的 “存储过程的执行 可由SP监控:启动, SP:StmtStarting、SP:StmtCompleted和 SP:已完成的事件类和所有 TSQL事件类。“
在SQL2005中,您可以使用管理视图查找运行缓慢的查询。我不久前发现的一个好脚本将帮助您开始;它首先列出执行速度最慢的数据
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;
在使用探查器之前,我会检查内置的使用情况报告。右键单击数据库、报表、标准报表,然后单击对象执行统计信息
它列出了当前缓存的执行计划,以及资源量和它们运行的次数。这通常可以很好地了解服务器忙的原因。定义“慢”。虽然查询可能很慢,但这只与所进行的调用的数量以及这些调用是否关键有关。您知道时间的度量单位:总工作时间、总已用时间和平均已用时间?时间以微秒为单位;MSDN在管理视图上有一个很好的细分是的,这些DMV很好-但是它们也是动态的-正如它们的名字所暗示的,例如,每次服务器启动时它们都会被刷新。如果您的服务器每晚都重新启动,那么在任何给定的一天中,这些可能都不是非常可靠的示例。因此,请谨慎对待这些度量值-它们是动态的,可能基于一个相当小的样本…我如何在此查询中添加一列以给出存储过程名称?@Hades for procedures您最好从sys.dm_exec_procedure开始_stats@Andomar,是否可以在生产服务器上运行该报告?我尝试在我的一台生产服务器上运行该报告,但一分钟后它仍然显示“检索数据”。我停下来是为了安全。@Bill Paetzke:即使报告很长,也应该是安全的。如果您不信任它,您可以检查进程列表中的阻塞问题!