有什么快速的方法来找出一个服务器上的网站将使用所有的CPU与SQL查询? 随机CPU只是坐在100%,我不知道为什么?
这肯定会帮助你知道你正在使用的SQL Server的版本。
我会考虑你现在最常用的SQL Server 2005。 要确定问题的原因,我build议您下载性能仪表板报告。 在下载页面的“附加信息”部分中详细介绍的安装自定义报告并运行然后部署脚本之后,可以在SQL Server Management Studio中打开自定义的performance_dashboard_mail.rdl报告。 从那里你可以得到CPU利用率报告的链接,它将显示系统中每个查询所消耗的总时间。 这些报告中最重要的查询是最有可能将系统驱动到100%CPU的查询。 你将不得不分析这些查询的执行计划,并确定它们为什么如此昂贵。 SSMS计划可视化工具可以帮助实现这一目标,只需遵循计划中的粗线条 ,因为它们代表了大量的数据stream。 在这些昂贵的数据stream的最后,您很可能会发现聚集索引扫描操作符返回表中的所有行。 您需要了解查询和表结构,才能决定为什么要select聚簇索引扫描,而且您可能需要决定是否添加一个或两个索引。 性能仪表板可以再次提供帮助,因为它实际上具有利用sys.dm_db_missing_index_details某种深奥的信息并以易读的格式显示的报告,更准确地说,它显示了build议的CREATE INDEX语句。
其他感兴趣的资源是:
sys.dm_exec_query_stats收集有关查询执行的信息。 在total_worker_time中具有最高值的查询是消耗大部分CPU的查询。 交叉应用sys.dm_exec_sql_text来检索查询文本。 sys.dm_exec_procedure_stats类似于查询统计信息,但是用于过程。 只在SQL Server 2008中。 sys.dm_db_index_usage_stats收集关于如何访问表和索引的信息。 查看user_seeks , user_scans , user_lookups来查看表读取的频率和方式。 查看user_updates来查看它被写入的频率。 sys.dm_db_index_operational_stats收集索引访问争用等信息。 查看各种xxx_wait_ms和xxx_wait_count列以了解争用发生的位置。 由于你有100%的CPU是不太可能的,虽然这个问题是争论,但我必须提出这个信息反正其他读者去这个。 调查完成后,您应该能够确定问题:
user_scans计数sys.dm_db_index_usage_stats索引有很多logging,在sys.dm_exec_query_stats total_physical_reads 。 execution_count来识别。 典型的例子是将逗号分隔的string拆分为关系表示的function(如果每次都有一angular钱)。 成功!
Microsoft SQL Management Studio中有一个活动监视器,它将显示最昂贵的查询和它们的CPU时间。 只需右键单击服务器资源pipe理器窗口中的服务器,然后单击“活动监视器”
您应该运行SQL Server Profiler来帮助您确定导致大量读/写时间的低效率查询的位置。
至于快速…那么,你可以运行一两分钟,这应该给你一个是否有一些SP /查询运行超过预期的迹象。
也请阅读这个问题,并接受答案。
如果SQL Server Profiler不起作用,您可能会开始考虑任何可能的蠕虫攻击。