2013-11-21 36 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) 
相关问题