Microsoft SQL @@cpu_busy 替代 CPU 饱和度统计

Microsoft SQL @@cpu_busy replacement for CPU saturation stat

我们有一个最初为 Sybase 编写的进程,它查看 @@cpu_busy 变量以检测 RDMS 上的 cpu 负载。该应用程序将 运行 反对 Microsoft SQL。

     curCPULoadPercent=100*(@@cpu_busy - prevCpuBusy)/((@@cpu_busy - prevCpuBusy)+(@@io_busy - prevIOBusy)+(@@idle - prevIdle))

如果上述任何增量为负数,则忽略比率并使用前一个。

不幸的是,微软工程师没有让数字滚动,而是停止增加数字 (134217727),因此在 29 天后无法显示 CPU 负载(根据我一直在阅读的内容)。

(Sybase的工程师知道负数减去负数是正差。)

以下提供了有关如何监控 CPU 负载的提示,但我们无法确定要查看的等待类型。

https://msdn.microsoft.com/en-us/library/ms179984.aspx

我们一直在测量@@cpu_busy 与等待类型相比的差异,而不是任何特定的等待类型匹配。

我们的计划是建立一个预测模型来预测相关等待类型的旧比率,但我想知道是否有人已经解决了这个问题。

有什么建议吗?

从 SQL2005 年开始,您可以从 SQL 服务器获得诸如等待类型和锁以及负载和内存压力之类的运行时详细信息,这些详细信息非常详细和多样。

不要对您正在做的事情使用@@ 变量。如果您可以准确定义您要检测的内容,我可以保证较新的 sql 视图具有您正在寻找的内容,特别是可以在 spid 或整体上下文中定义这些值。

SQL 探查器工具可以绘制出您可能正在寻找的值。

Benjamin Nevarez 给出了 CPU 利用率的答案:

http://sqlblog.com/blogs/ben_nevarez/archive/2009/07/26/getting-cpu-utilization-data-from-sql-server.aspx

它使用来自 sys.dm_os_ring_buffers 的动态管理视图数据 其中 ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'.