次の 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]
このデータは、サーバー上で実行されているサービスによって約 1 回の頻度でログに記録されます。5分。
したがって、私の目標は、時間の経過に伴う CPU 使用率を示すグラフを描くことです。そのため、エンドユーザーはグラフの「開始日」と「終了日」を指定でき、グラフ自体は N 個のデータ ポイントに分割されます。(簡単にするために、N を 24 としましょう。)
CPU 使用率の N 個 (または 24 個) のデータ ポイントを取得してグラフにプロットする次の SQL ステートメントを思いつきました。
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 日または 1 か月の場合よりも高くなります。これは正常ですか?期間が長いほど、グラフが平坦になるようです。