SQL Server CPU 使用率有时超载

Web*_*Guy 2 performance sql-server windows-server performance-testing

我们确实有几台服务器,一台专用于没有 SQL 的网站,另一台服务器专用于 SQL。

现在运行 SQL 的服务器非常强大,但有时服务器 CPU 只是达到 100%。

这是几个屏幕截图,显示了正在发生的事情。

CPU 已满:

在此处输入图片说明

CPU运行正常:

在此处输入图片说明

如您所见,服务器非常强大。

补充说明。

  1. 我们正在运行 nopcommerce 版本 3.70
  2. 该网站已由其他开发人员进行了大量定制。
  3. 该网站有大约 4000 - 5000 种产品。
  4. 当 CPU 达到最大值时,加载时间令人震惊。> 30 秒,有时超过 1 分钟。

有没有人能够对可能发生的事情有所了解,或者指导我完成一些检查。

干杯

更新:以下两个屏幕截图是@S4V1N 建议我运行的两个查询的结果。

在此处输入图片说明

在此处输入图片说明

Eri*_*ing 6

有没有人能够对可能发生的事情有所了解,或者指导我完成一些检查。

让我们从显而易见的事情开始。您的服务器,用于生产 SQL 盒,不是那么强大。例如,这就是我从事的开发工作,而我大部分时间只是一个闲逛的顾问。

坚果

话虽如此,更多的硬件可能无法解决您所有的问题。我不熟悉您提到的平台,但通常当您从基础产品开始,并且开始将其称为“高度定制”时,这意味着用于基础产品的代码和索引可能不熟悉不再那么好用了。

你可以从什么开始?

我工作的公司编写了免费脚本,可以帮助您找到这些事情的根源。是否可以通过硬件或供应商支持修复是另一回事。

许多供应商不喜欢您更改他们的产品。但是,嘿,至少你可以开始关于做出改变的对话。

  1. 运行 sp_Blitz

EXEC sp_Blitz @CheckUserDatabaseObjects = 1, @CheckServerInfo = 1;

这将使您大致了解服务器的健康状况。请注意此处的几个设置:并行性的 MAXDOP 和成本阈值,并在此处查看我的答案,了解为什么它们可以对您的情况产生影响。

  1. 运行 sp_BlitzFirst

EXEC sp_BlitzFirst @SinceStartup = 1;

这将告诉您服务器自启动以来一直在做什么。查看等待统计信息窗格,看看您的瓶颈在哪里。

坚果

  1. 运行 sp_BlitzCache

EXEC sp_BlitzCache @SortOrder = 'cpu';

坚果

由于您担心计划缓存,因此请先按 CPU 进行查看。您可能会发现其他排序顺序很有帮助,但从这里开始。

我们会警告您查询计划中的各种内容,并为您提供尽可能多的历史信息。

  1. 运行 sp_BlitzIndex

EXEC sp_BlitzIndex @DatabaseName = N'YourDatabaseName', @Mode = 4

您在这里要查看的主要内容是高价值缺失索引,它应该位于顶部。

  1. 当你发现 CPU 峰值时,运行 sp_BlitzWho

EXEC sp_BlitzWho

这会让您知道当 CPU 高时正在运行哪些查询。它们可能与计划缓存中的内容不同。

希望这可以帮助!