Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何查找最慢的查询_Sql Server_Sql Server 2005_Profiling - Fatal编程技术网

Sql server 如何查找最慢的查询

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:已完成的事件类和

使用SQLServer2005Profiler,您跟踪哪些事件、列和筛选器来查找最慢的查询和存储过程


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:即使报告很长,也应该是安全的。如果您不信任它,您可以检查进程列表中的阻塞问题!