2013-11-21 32 views
0

我有一個SQL表(Oracle和DB2),其中包含來自多個服務器的進程統計信息。爲了保持它的簡單讓說它有:選擇一系列數據,其中一個或多個實例違反閾值

Timestamp | Server | PID | Command_line | CPU_Usage 
1385101402, hosta,  489, init,   0.3 
1385101399, hosta,  264, perl test.pl, 32 
1385102402, hosta,  489, init,   0.3 
1385102399, hosta,  264, perl test.pl, 22 
1385103402, hosta,  489, init,   0.3 
1385103402, hostb,  489, init,   0.2 
1385103399, hosta,  264, perl test.pl, 17 
1385104402, hosta,  489, init,   0.1 
1385104402, hostb,  489, init,   0.2 
1385104399, hosta,  264, perl test.pl, 4 
1385105402, hosta,  489, init,   0.3 
1385105402, hostc,  489, init,   0.3 
1385105399, hosta,  264, perl test.pl, 42 
1385106402, hosta,  489, init,   0.5 
1385106399, hosta,  264, perl test.pl, 52 

我想產生一個有意義的圖表,但你可以想像這個表是很大的。所以我想要做的只是提取超過50%CPU的進程的詳細信息。對於數據點(WHERE「CPU_Usage」> 50)很容易完成此操作,但當然只有當它們高於50%時才顯示它們,之前的歷史記錄和隨後的性能低於50%時不會生成圖表。

我想要的是任何PID + Command_Line tupple,發現超過50%的CPU都會獲取所有可用的數據。所以在這個例子中,我想要所有PID 264進程的樣本,因爲它違反了閾值。其餘我想忽略

+0

你能提供一些數據嗎? – CaveCoder

+0

並且還提供您正在使用的DBMS系統 – CaveCoder

+0

這需要在Oracle和DB2上運行。數據比例子更大,但是有些典型 – user1534668

回答

2

看到一個工作demo爲oracle。我不確定DB2。

WITH DATASET 
    AS (SELECT 489 AS PID, 0.3 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 264 AS PID, 32 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 489 AS PID, 0.3 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 264 AS PID, 22 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 489 AS PID, 0.3 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 489 AS PID, 0.2 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 264 AS PID, 17 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 489 AS PID, 0.1 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 489 AS PID, 0.2 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 264 AS PID, 4 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 489 AS PID, 0.3 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 489 AS PID, 0.3 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 264 AS PID, 42 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 489 AS PID, 0.5 AS PERCENTAGES FROM DUAL UNION ALL 
     SELECT 264 AS PID, 52 AS PERCENTAGES FROM DUAL) 
SELECT 
     * 
FROM 
     DATASET B 
WHERE 
     B.PID IN (SELECT 
        A.PID 
       FROM 
        DATASET A 
       WHERE 
        A.PERCENTAGES > 50) 
相關問題