SQL Server性能分析我应该如何处理它?
问题描述:
所以我之前使用过SQL Profiler,我知道我可以如何查看我的LINQ查询在后台执行的操作。现在,我们正在识别可能需要更多时间并需要优化或具有一些索引的查询。SQL Server性能分析我应该如何处理它?
所以,现在当我在并行运行它的探查器中查看我的LINQ查询时,还有很多其他数据和查询,我不在乎。无论如何,探查器或其他工具可以按照最大时间的顺序对查询进行排序......以便我优化它。我想运行我的应用程序,然后在分析器中以某种方式查看该批次中最糟糕的查询。
任何人都可以引导或指导我尝试使用sql server 2005进行性能分析时更有用的东西。也欢迎任何想法或建议或关于分析的最佳方法。谢谢。
答
下面是一个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发现性能问题。
答
您可以从启动Profiler时更改跟踪属性开始。选择事件选择选项卡,然后单击列过滤器按钮。在编辑过滤器对话框中,选择持续时间。然后点击大于或等于并输入一个值。该值以毫秒为单位,因此如果要查看持续时间超过5秒的查询,请输入5000.
您也可以在此查看其他过滤器,并根据需要配置持续时间值。
答
一个“快速的肮脏的”最坏的查询列表,你可以只使用这样的事情:
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