【问题标题】:SQL Server 100% CPU Utilization - One database shows high CPU usage than othersSQL Server 100% CPU 使用率 - 一个数据库的 CPU 使用率高于其他数据库
【发布时间】:2012-09-17 12:04:09
【问题描述】:

我们有一个 SQL 服务器,其中包含大约 40 个不同的数据库(每个数据库大约 1-5GB)。服务器是一个 8 核 2.3G CPU 和 32G 内存。 27Gig 固定到 SQL Server。 CPU 利用率几乎总是接近 100%,内存消耗约为 95%。这里的问题是 CPU 一直接近 100% 并试图了解原因。

我已经使用 -this 脚本运行了一个初始检查,以查看哪个数据库对高 CPU 有贡献,但我无法详细证实真正消耗 CPU 的内容。顶部查询(来自所有数据库)只需大约 4 秒即可完成。 IO 也不是瓶颈。

内存会是这里的罪魁祸首吗?我检查了内存拆分,并且 OBJECT CACHE 占用了分配给 SQL Server 的大约 80% 的内存 (27G)。我希望这是正常的,只要涉及到很多 SP。运行分析器,我确实看到了很多重新编译,但主要是由于“临时表更改”、“延迟编译”等,不清楚这些重新编译是否是由于内存压力导致计划被抛出缓存的结果

欣赏任何想法。

【问题讨论】:

  • 我假设您已经检查了 sql server 可执行文件并确保它正在使用 CPU 周期。
  • 是的,我查过了,是SQL Server进程占用了所有的CPU

标签: sql-server sql-server-2005 cpu-usage sql-server-performance


【解决方案1】:

您可以在 SSMS 中看到一些报告:

右键单击实例名称/报告/标准/顶级会话

您可以查看 CPU 消耗最高的会话。这可能有助于了解哪些 SQL 进程正在使用资源。如果您环顾四周,还有其他一些与 CPU 相关的报告。我本来打算指向更多的 DMV,但如果你已经研究过,我会跳过它。

您可以使用 sp_BlitzCache 查找 CPU 消耗最高的查询。您还可以按 IO 和其他内容进行排序。这是使用在重新启动之间累积的 DMV 信息。

This article 看起来很有希望。

Ozar 先生的一些 stackoverflow 好意。

编辑: 多一点建议... 运行“仅”5 秒的查询可能是个问题。它可能会使用你所有的核心,真正运行 8 个核心乘以 5 秒 - 40 秒的“虚拟”时间。我喜欢使用一些 DMV 来查看该代码执行了多少次,以查看这 5 秒的总和。

【讨论】:

  • 谢谢 Sam,我会检查文章和链接。关于报告的观点,我确实检查了许多关于 CPU、IO 和内存各个方面的报告,我发现最热门的查询花费的时间不超过 5 秒。这让我很困惑。我已经监测了这个行为一个多星期了,没有任何变化
  • 谢谢。这些 SSMS 报告帮助我找到了导致整个查询在其中一张表上冻结的死锁事务。我能够找到罪魁祸首并终止它。
【解决方案2】:

根据this关于sqlserverstudymaterial的文章;

请记住,“%Privileged time”不是基于 100%。它基于处理器数量。如果您看到 sqlserver.exe 为 200,并且系统有 8 个 CPU,则 sqlserver.exe 消耗的 CPU 为 200 800(仅 25%)。

如果“% Privileged Time”值超过 30%,则一般是驱动程序或杀毒软件有问题。在这种情况下,请确保 BIOS 和过滤驱动器是最新的,然后尝试暂时禁用防病毒软件以查看更改。

如果“% User Time”很高,则说明 SQL Server 有一些消耗。 有几种已知模式可能会导致 SQL Server 中运行的进程的 CPU 过高,包括

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2010-09-06
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多