2010-10-27 32 views
5

所以我之前使用过SQL Profiler,我知道我可以如何查看我的LINQ查询在后台执行的操作。现在,我们正在识别可能需要更多时间并需要优化或具有一些索引的查询。SQL Server性能分析我应该如何处理它?

所以,现在当我在并行运行它的探查器中查看我的LINQ查询时,还有很多其他数据和查询,我不在乎。无论如何,探查器或其他工具可以按照最大时间的顺序对查询进行排序......以便我优化它。我想运行我的应用程序,然后在分析器中以某种方式查看该批次中最糟糕的查询。

任何人都可以引导或指导我尝试使用sql server 2005进行性能分析时更有用的东西。也欢迎任何想法或建议或关于分析的最佳方法。谢谢。

回答

3

下面是一个DMV查询,它将列出有关CPU时间的一些详细信息的查询。一旦你确定查询运行它Include Actual Execution Plan设置为查看查询流和你可能需要索引的地方。

select 
    highest_cpu_queries.plan_handle, 
    highest_cpu_queries.total_worker_time, 
    q.[text] 
from 
    (select top 50 
     qs.plan_handle, 
     qs.total_worker_time 
    from 
     sys.dm_exec_query_stats qs 
    order by qs.total_worker_time desc) as highest_cpu_queries 
    cross apply sys.dm_exec_sql_text(plan_handle) as q 
order by highest_cpu_queries.total_worker_time desc 

这是一个很好的article发现性能问题。

1

您可以从启动Profiler时更改跟踪属性开始。选择事件选择选项卡,然后单击列过滤器按钮。在编辑过滤器对话框中,选择持续时间。然后点击大于或等于并输入一个值。该值以毫秒为单位,因此如果要查看持续时间超过5秒的查询,请输入5000.

您也可以在此查看其他过滤器,并根据需要配置持续时间值。

2

一个“快速的肮脏的”最坏的查询列表,你可以只使用这样的事情:

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 3 DESC 

见:http://msdn.microsoft.com/en-us/library/ms189741%28SQL.90%29.aspx