我们有一个包含 SQL Server 2008R2 和大约 50 个数据库的客户服务器。问题是 CPU 使用率达到 100%(或接近)并且持续了几个小时。这通常发生在早上(通常在早上 6 点到 9 点左右)。平均 CPU 使用率为 30%
我们查看了预定的报告,但找不到任何东西——我们确实决定在早上早些时候安排它们,但没有任何作用。
我明天要去远程调查这个问题。我们已经重建了索引,但这并没有帮助。我有一组 DMV 来检查具有最高工作时间和最长运行时间的查询。
SQL Server 是否跟踪所有运行的查询,以便 DMV 可以访问信息?还有哪些其他 sql 片段有助于诊断问题?
编辑:内存使用率也很高——大约 80-90%。实际上,另一台服务器同时遇到了同样的问题,我相信它们都托管在 citrix 服务器上。
我们还进行了索引重建。
我建议看看这里发布的免费电子书 Red Gate: 使用 SQL Server 动态管理视图进行性能调优。它是免费的,而且很好读。它将指出提供累积数据与时间点(当前在缓冲区中的数据)的那些 DMV。只要服务器没有重新启动,您就可以很好地捕获一些有用的信息。
如果您可以在指定的时间内运行它,您也可以使用
sp_whoisactive
它来提供更多信息。返回每个查询的 CPU、内存和 I/O 使用情况。您甚至可以让它拉出有问题的查询的执行计划。对 SQL Server DMV 和高 CPU 查询进行基本的 Bing/Google 搜索,否则可能会出现一些其他好的脚本/博客文章来研究您的特定情况。
只是关于您关于移动预定报告的评论的注释,我还将查看有关用户可能自行运行的临时报告。特别是如果您在与数据库引擎相同的服务器上运行 SSRS。我通常看一下 SSRS 数据库中的 ExecutionLog 表(默认名称 ReportServer)。那里有大量关于报告执行时间和呈现时间的信息。
我会使用 select * from sys.dm_exec_requests 来查看针对数据库执行的请求。您将看到等待类型、等待资源等。它将为您提供比 sp_who2 更多的信息。高 CPU 使用率可能由多种原因引起,例如: