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

时间:2015-05-15 00:11:33

标签: sql sql-server sybase

我们有一个最初为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差异,而不是任何特定的等待类型匹配。

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

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

从SQL2005开始,您可以从SQL Server获取等待类型和锁定以及负载和内存压力等内容的运行时详细信息非常详细和多样。

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

SQL Profiler工具可以绘制您正在寻找的值。

答案 1 :(得分:0)

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中的Dynamic Mgmt View数据 其中ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'。