我们有 SQL 服务器所在的 VM。VM 有 36 个核心,而 SQL Server 消耗 24 个核心(由于版本限制,这里有一些捕获的指标以及我们有疑问的地方。
SQL 服务器进程的总体 CPU 负载(SQL 服务器有 24 个可见的在线调度程序,因此服务器可以消耗的最大值为 2400%)
所以我们可以看到 SQL server 并没有消耗 100% 的 CPU 资源。
当 SQL 服务器的工作线程耗尽 4 毫秒时,它将进入可运行队列,SQL 服务器注册 SOS_SCHEDULER_YIELD 等待及其注册信号等待时间(工作线程在等待处理器队列中)。根据我的理解,当有大量工作线程在服务器上运行分配的任务时,它们经常进入可运行队列并且 CPU 负载很高,因为它应该执行持续的工作并且信号时间会增加。
因此,对于 30 分钟,我们有 700 分钟的 SOS_SCHEDULER_YIELD 等待时间,其中 100% 等待时间 = 100% 信号等待时间 - 当 CPU 成为瓶颈但 CPU 使用率不高时的模式。为什么会这样?这是正常行为吗?我们有这样的指标是正常情况吗?