我使用以下 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 天或一个月的时间跨度。这是正常的吗?似乎时间跨度越长,我的图表就越平坦。