澄清信号等待百分比

Sta*_*ser 3 sql-server sql-server-2008-r2 wait-types waits

我遇到了高信号等待百分比,而我们的一台服务器的 CPU 利用率非常低。
我在网上阅读了许多关于 Signal Waits 的文章,并了解它是在可运行队列上花费的时间,但是我仍然很难理解为什么 CPU 使用率保持如此低 (25%) 而 Signal Waits 的百分比很高(75-90% 的范围。)
如果会话正在等待可用的 CPU 来运行它,为什么 CPU 利用率如此之低?

Bre*_*zar 9

不要用百分比调整。您的服务器将始终有 100% 的等待时间 - 但可能没有太多负载。您的服务器就是典型的例子。

假设您每小时仅运行 1 个查询。查询的所有数据都已经缓存在内存中,并且没有其他人争用锁。该查询中有几个并行任务,它们都需要获取 CPU 时间。

该查询将工作一段时间,然后完成。如果您查看信号等待,它可能看起来有 90-100% 的时间,当它在等待时,它正在等待获取 CPU。但它只是没有等那么久。

相反,请查看每个内核、每秒(或每小时)的等待时间,如下所述:

https://www.brentozar.com/archive/2015/03/how-to-measure-sql-server-workloads-wait-time-core-second/

(免责声明:我写的。)这样,您就可以查看服务器是否真的在做任何工作。我打赌你的服务器,你每小时只等待几分钟——这意味着,你不需要费心调整服务器的整体。这并不意味着每个 QUERY 都很快——它只是意味着你不能做服务器级的调优,你必须切换到查询级的调优。(你必须问为什么查询很慢,而不是问为什么服务器很慢。)