我使用以下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天或一个月的时间跨度。这是正常的吗?似乎我的图表变得更平坦的时间越长。
答案 0 :(得分:1)
这是预期的,因为您的图表上有一定数量的数据点。
您已将图表划分为24点。假设您想要显示2天的数据。当您每小时分配超过24点时,平均值(总和/计数)将变平。要显示每个尖峰,你需要在你的轴上有48个点。