Активность Oracle Session за последние 10 секунд - PullRequest
0 голосов
/ 31 августа 2018

Я хочу преобразовать этот запрос в последние 10 секунд вместо последних часов

SELECT TO_CHAR(SAMPLE_TIME, 'HH24:MI ') AS SAMPLE_TIME,
       ROUND(OTHER / 60, 3) AS OTHER,
       ROUND(CLUST / 60, 3) AS CLUST,
       ROUND(QUEUEING / 60, 3) AS QUEUEING,
       ROUND(NETWORK / 60, 3) AS NETWORK,
       ROUND(ADMINISTRATIVE / 60, 3) AS ADMINISTRATIVE,
       ROUND(CONFIGURATION / 60, 3) AS CONFIGURATION,
       ROUND(COMMIT / 60, 3) AS COMMIT,
       ROUND(APPLICATION / 60, 3) AS APPLICATION,
       ROUND(CONCURRENCY / 60, 3) AS CONCURRENCY,
       ROUND(SIO / 60, 3) AS SYSTEM_IO,
       ROUND(UIO / 60, 3) AS USER_IO,
       ROUND(SCHEDULER / 60, 3) AS SCHEDULER,
       ROUND(CPU / 60, 3) AS CPU,
       ROUND(BCPU / 60, 3) AS BACKGROUND_CPU
  FROM (SELECT TRUNC(SAMPLE_TIME, 'MI') AS SAMPLE_TIME,
               DECODE(SESSION_STATE,
                      'ON CPU',
                      DECODE(SESSION_TYPE, 'BACKGROUND', 'BCPU', 'ON CPU'),
                      WAIT_CLASS) AS WAIT_CLASS
          FROM V$ACTIVE_SESSION_HISTORY
         WHERE SAMPLE_TIME > SYSDATE - INTERVAL '1'HOUR AND SAMPLE_TIME <= TRUNC(SYSDATE, 'MI')) ASH PIVOT(COUNT(*) 
  FOR WAIT_CLASS IN('ON CPU' AS CPU,'BCPU' AS BCPU,'Scheduler' AS SCHEDULER,'User I/O' AS UIO,'System I/O' AS SIO, 'Concurrency' AS CONCURRENCY, 
'Application' AS  APPLICATION,COMMIT,                                                                             
'Configuration' AS CONFIGURATION,                     
'Administrative' AS   ADMINISTRATIVE,                                                                                 
'Network' AS  NETWORK,                                                                                 
'Queueing' AS   QUEUEING,                                                                                  
'Cluster' AS   CLUST,                                                                                      
'Other' AS  OTHER))
ORDER BY 1  

Я пытался использовать это ГДЕ SAMPLE_TIME> SYSDATE - (10) / (24 * 60 * 60) но это не работает Это дает мне результат в минуту. Но я хочу последние 10 секунд (так 10 строк)

1 Ответ

0 голосов
/ 31 августа 2018

Вам нужно изменить внешний список выбора, чтобы включить секунды:

SELECT TO_CHAR(SAMPLE_TIME, 'HH24:MI:SS') AS SAMPLE_TIME,

Вам необходимо удалить усечение минутного уровня из внутреннего списка выбора запросов:

  FROM (SELECT SAMPLE_TIME,

Вам необходимо изменить фильтр времени выборки (поскольку столбец является меткой времени, он также может использовать systimestamp и интервал, чтобы он оставался единым):

         WHERE SAMPLE_TIME > SYSTIMESTAMP - INTERVAL '10' SECOND
  )
  ASH PIVOT(COUNT(*) 

И, как отмечено в комментариях, ваш COMMIT должен быть 'Commit' as COMMIT, в противном случае вы получите «ORA-56901: непостоянное выражение недопустимо для значений pivot | unpivot», по крайней мере, в 11gR2, 12cR1 и 12cR2; и вам нужно указать действительное имя wait_class, как оно отображается в представлении ASH.

С этими изменениями, кажется, запрос делает то, что вы хотите. Это не обязательно покажет 10 строк, поскольку, возможно, не было образцов каждую секунду; например на очень тихой БД я обычно не получаю ни одной строки или только нескольких.

SELECT TO_CHAR(SAMPLE_TIME, 'HH24:MI:SS ') AS SAMPLE_TIME,
       ROUND(OTHER / 60, 3) AS OTHER,
       ROUND(CLUST / 60, 3) AS CLUST,
       ROUND(QUEUEING / 60, 3) AS QUEUEING,
       ROUND(NETWORK / 60, 3) AS NETWORK,
       ROUND(ADMINISTRATIVE / 60, 3) AS ADMINISTRATIVE,
       ROUND(CONFIGURATION / 60, 3) AS CONFIGURATION,
       ROUND(COMMIT / 60, 3) AS COMMIT,
       ROUND(APPLICATION / 60, 3) AS APPLICATION,
       ROUND(CONCURRENCY / 60, 3) AS CONCURRENCY,
       ROUND(SIO / 60, 3) AS SYSTEM_IO,
       ROUND(UIO / 60, 3) AS USER_IO,
       ROUND(SCHEDULER / 60, 3) AS SCHEDULER,
       ROUND(CPU / 60, 3) AS CPU,
       ROUND(BCPU / 60, 3) AS BACKGROUND_CPU
  FROM (SELECT SAMPLE_TIME AS SAMPLE_TIME,
             DECODE(SESSION_STATE,
                    'ON CPU',
                    DECODE(SESSION_TYPE, 'BACKGROUND', 'BCPU', 'ON CPU'),
                    WAIT_CLASS) AS WAIT_CLASS
          FROM V$ACTIVE_SESSION_HISTORY
         WHERE SAMPLE_TIME > SYSTIMESTAMP - INTERVAL '10' second
  ) ASH
PIVOT (
  COUNT(*) 
  FOR WAIT_CLASS IN ('ON CPU' AS CPU,
    'BCPU' AS BCPU,
    'Scheduler' AS SCHEDULER,
    'User I/O' AS UIO,
    'System I/O' AS SIO,
    'Concurrency' AS CONCURRENCY, 
    'Application' AS  APPLICATION,
    'Commit' as COMMIT,
    'Configuration' AS CONFIGURATION,
    'Administrative' AS   ADMINISTRATIVE,
    'Network' AS  NETWORK,
    'Queueing' AS   QUEUEING,
    'Cluster' AS   CLUST,
    'Other' AS  OTHER)
)
ORDER BY 1  
/
SAMPLE_TI      OTHER      CLUST   QUEUEING    NETWORK ADMINISTRATIVE CONFIGURATION     COMMIT APPLICATION CONCURRENCY  SYSTEM_IO    USER_IO  SCHEDULER        CPU BACKGROUND_CPU
--------- ---------- ---------- ---------- ---------- -------------- ------------- ---------- ----------- ----------- ---------- ---------- ---------- ---------- --------------
17:57:26           0          0          0          0              0             0          0           0           0          0          0          0       .017              0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...