2008-08-18 81 views
9

我们在SQL Server 2005群集上发生零星的随机查询超时。我拥有一些使用它的应用程序,所以我正在协助调查。当观察普通ol Perfmon中的%CPU时间时,你当然可以看到它挂钩了。但是,SQL活动监视器仅给出进程使用的累积CPU和IO时间,而不是正确使用的时间或特定时间范围内的时间。也许我可以使用探查器并运行踪迹,但是这个群集的使用非常繁重,恐怕我会在大海捞针中寻找针。我吠叫错了树吗?识别SQL Server性能问题

有没有人有一些好的方法来跟踪这个环境中的昂贵的查询/进程?

回答

12

这会给你的平均CPU时间的前50个报表,查看这里的其他脚本:http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true

SELECT TOP 50 
     qs.total_worker_time/qs.execution_count as [Avg CPU Time], 
     SUBSTRING(qt.text,qs.statement_start_offset/2, 
      (case when qs.statement_end_offset = -1 
      then len(convert(nvarchar(max), qt.text)) * 2 
      else qs.statement_end_offset end -qs.statement_start_offset)/2) 
     as query_text, 
     qt.dbid, dbname=db_name(qt.dbid), 
     qt.objectid 
FROM sys.dm_exec_query_stats qs 
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt 
ORDER BY 
     [Avg CPU Time] DESC 
2

分析器可能看起来像一根“大海捞针”的方法,但它可能会出现一些有用的东西。在数据库处于典型负载的情况下,尝试运行它几分钟,然后查看是否有任何疑问突出表现为花费太多时间或以某种方式占用资源。虽然这样的情况可能会导致一些普遍性问题,但也可能与一个或两个站点的某个特定问题有关,这些问题在某些情况下会造成混乱,导致整个板块的性能很差。

4

我们使用Quest的Spotlight产品。很明显,这是对时间和金钱的投资,所以它在短期内可能无法帮到你,但如果你有一个大型的SQL环境,它非常有用。

3

至于雅各布说,运行探查典型负载下几分钟,并将结果保存到表,它将允许您针对结果运行查询,使查找任何资源占用率查询变得更容易。

2

针对超过特定读取次数的查询运行事件探查器和过滤器。对于我工作的应用程序,任何超过5000次读取的非报告查询值得再看一次。你的应用可能有不同的门槛,但这个想法是一样的。

2

This utility通过Erland Sommarskog是非常有用的。

这是您添加到数据库的存储过程。每当你想查看哪些查询处于活动状态并获取锁,块等的好图片时运行它。当事情似乎被抹掉时,我经常使用它。

4

我发现Performance Dashboard Reports非常有帮助。它们是由Microsoft提供的一组自定义RS报告。您只需在客户端PC上运行安装程序,然后在SQL Server实例上运行setup.sql。

然后,右键单击SSMS中的某个数据库(无关紧要),然后点击Reports - > Custom Reports。浏览并选择默认情况下位于\ Program Files \ Microsoft SQL Server \ 90 \ Tools \ PerformanceDashboard文件夹中的performance_dashboard_main.rdl。你只需要做一次。第一次后,它会显示在报告列表中。

除了别的以外,主仪表板视图将显示CPU利用率。你可以偶尔刷新它。当您看到尖峰时,只需点击图表上的条形图即可获得详细数据。