1

タイトルがあまり混乱しないことを願っています。これが私のコードです

SELECT SRV_NAME, TOT_CPU, TOT_MEM, SNAP_DATE
FROM capacity2.SRV_CAPACITY_UNIX
WHERE TOT_CPU >= 90 OR TOT_MEM >= 90 AND SNAP_DATE BETWEEN to_date('14-jun-2012 00:00:00', 'dd-mon-yyyy hh24:mi:ss') AND to_date('14-jul-2012 00:00:00', 'dd-mon-yyyy hh24:mi:ss')
ORDER BY SRV_NAME desc, SNAP_DATE desc;

コードが返すデータのサンプルは次のとおりです。

SNAP_DATE       TOT_CPU TOT_MEM SRV_NAME
6/22/2012 0:00  99.98   70.86   server555
6/22/2012 0:05  99.98   70.9    server555
6/22/2012 0:10  99.98   70.93   server555
6/22/2012 0:15  99.98   71.06   server555
6/22/2012 0:20  99.98   70.87   server555
...
6/22/2012 23:35 99.97   71.12   server555
6/22/2012 23:40 99.99   71.12   server555
6/22/2012 23:45 99.97   71.12   server555
6/22/2012 23:50 99.98   71.12   server555
6/22/2012 23:55 99.98   71.12   server555

目的:

特定の期間 (この場合は 1 か月/30 日)capacity2.SRV_CAPACITY_UNIXで 90% 以上 (TOT_CPUおよび)であるサーバー (サーバーはデータベース内にある) のデータを抽出します。TOT_MEMこのデータをグラフ化する必要があります。デフォルトでは、データは 5 分ごとに記録されるため、約 30 日間にわたって 1 日で 288 行が残っています。これは、明らかに非現実的なグラフにプロットするために残されている約 8,600 行です。

したがって、私がする必要があるのは、毎日の平均TOT_CPUと平均のみを抽出する SQL クエリを作成するTOT_MEMことです。これにより、30 日間プロットする必要がある 30 行のデータ (毎日 1 行) のみが残ります。

スタック オーバーフローを使用するのはこれが初めてなので、できるだけ明確にしようとしました。必要な情報があれば、必ず提供します。

4

1 に答える 1

1

関数に基づいて、TO_DATEこれは Oracle であると仮定します。したがって、次のようになります。

select SRV_NAME, TRUNC(SNAP_DATE) SNAP_DATE, 
       avg(TOT_CPU) AVG_TOT_CPU, avg(TOT_MEM) AVG_TOT_MEM
FROM capacity2.SRV_CAPACITY_UNIX
WHERE TOT_CPU >= 90 OR TOT_MEM >= 90 
AND SNAP_DATE BETWEEN to_date('14-jun-2012 00:00:00', 'dd-mon-yyyy hh24:mi:ss') 
              AND     to_date('14-jul-2012 00:00:00', 'dd-mon-yyyy hh24:mi:ss')
group by SRV_NAME, TRUNC(SNAP_DATE)

これもサーバーごとに分類されていることに注意してください。おそらく、サーバーごとに 1 つのシリーズをプロットします。

また、万が一、特定の日のログ データがない場合、その日は結果に含まれず、プロット ロジックで処理する必要があることに注意してください。

于 2012-07-17T17:19:04.640 に答える