0

我使用以下 SQL Server 2008 表结构在我的服务器上收集了 CPU 使用率数据:

CREATE TABLE [tbl] 
[id] BIGINT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[dt] DATETIME2,   -- date/time when CPU usage was collected
[usage] TINYINT   -- value from [0 to 100]

此数据由服务器上运行的服务记录,频率约为。5分钟。

所以我现在的目标是绘制一个图表,显示一段时间内的 CPU 使用率。为此,最终用户可以指定图表的“从”和“到”日期,并且图表本身被分成 N 个数据点。(为简单起见,假设 N 为 24。)

我想出了以下 SQL 语句来检索 CPU 使用率的 N(或 24)个数据点以绘制在我的图表上:

SELECT COUNT([usage]), SUM([usage]) FROM [tbl] 
 WHERE [dt]>='_DateDataPoint0_' AND [dt]<'_DateDataPoint1_'
UINON ALL
SELECT COUNT([usage]), SUM([usage]) FROM [tbl] 
 WHERE [dt]>='_DateDataPoint1_' AND [dt]<'_DateDataPoint2_'
--and so on, until Nth data point

如果:

"from" = June 14, 2013, 00:00:00
"to" = June 15, 2013, 00:00:00

我得到以下数据点日期/时间:

_DateDataPoint0_ = 2013-06-14 00:00:00
_DateDataPoint1_ = 2013-06-14 01:00:00
_DateDataPoint2_ = 2013-06-14 02:00:00
and so on ...
_DateDataPoint23_ = 2013-06-14 23:00:00
_DateDataPoint24_ = 2013-06-15 00:00:00

所以最后我的 ASP.NET 脚本接收到 N 对数据:

Count_Usage_DataPointN
Sum_Usage_DataPointN

因此,要获得特定数据点的使用次数,我这样做:

Usage_N = Sum_Usage_DataPointN / Count_Usage_DataPointN

首先,我很好奇这是否是正确的做法?

其次,我对上述选择的一些奇怪结果感到好奇。比如说,如果我的时间跨度为 1 小时,则生成的 CPU 使用数据的峰值要高于 1 天或一个月的时间跨度。这是正常的吗?似乎时间跨度越长,我的图表就越平坦。

4

1 回答 1

1

这是意料之中的,因为您的图表上有固定数量的数据点。

您已将图表分成 24 个点。假设您想显示 2 天的数据。当您每小时分配超过 24 个点时,平均值(总和/计数)将变平。要显示每个单独的峰值,您需要在轴上设置 48 个点。

于 2013-06-15T02:10:24.380 回答