我的信号等待百分比很高,而我们其中一台服务器的 CPU 利用率非常低。
我在网上浏览了许多关于 Signal Waits 的文章,并了解到这是花费在可运行队列上的时间,但是我仍然很难理解为什么 CPU 使用率保持如此低 (25%) 而 Signal Waits 的百分比很高(75-90% 的范围。)
如果会话正在等待可用的 CPU 来运行它,为什么 CPU 利用率如此之低?
我的信号等待百分比很高,而我们其中一台服务器的 CPU 利用率非常低。
我在网上浏览了许多关于 Signal Waits 的文章,并了解到这是花费在可运行队列上的时间,但是我仍然很难理解为什么 CPU 使用率保持如此低 (25%) 而 Signal Waits 的百分比很高(75-90% 的范围。)
如果会话正在等待可用的 CPU 来运行它,为什么 CPU 利用率如此之低?
不要用百分比来调整。您的服务器将始终有 100% 的等待时间 - 但可能不会有太多负载。您的服务器就是典型的例子。
假设您每小时只运行 1 个查询。所有查询的数据都已经缓存在内存中,没有其他人竞争锁。该查询中有几个并行任务,它们都需要获取 CPU 时间。
该查询只会工作一段时间,然后完成。如果您查看信号等待,它可能看起来有 90-100% 的时间,当它等待时,它正在等待上 CPU。但它只是没有等待那么多。
相反,请查看每个核心、每秒(或每小时)的等待时间,如下所述:
https://www.brentozar.com/archive/2015/03/how-to-measure-sql-server-workloads-wait-time-core-second/
(免责声明:我写的。)这样,您可以查看服务器是否真的在做任何工作。我敢打赌你的服务器,你每小时只需要等待几分钟——这意味着,你根本不需要费心调整整个服务器。这并不意味着每个 QUERY 都很快——它只是意味着你不能进行服务器级调优,你必须切换到查询级调优。(你必须问为什么查询慢,而不是问为什么服务器慢。)