Krótko mówiąc:nie będziesz w stanie tego zrobić za pomocą jednego zapytania, będziesz musiał napisać PL/SQL, aby zebrać przydatne dane w celu uzyskania przydatnych informacji.
Oracle dysponuje statystykami „zakumulowanego czasu”, co oznacza, że silnik stale śledzi wykorzystanie. Będziesz musiał zdefiniować czas rozpoczęcia i czas zakończenia analizy.
Możesz zapytać „procesor DB” z V$SYS_TIME_MODEL
select value into t_db_cpu_i
from sys.V_$SYS_TIME_MODEL
where stat_name = 'DB CPU' ; /* start time */
...
select value into t_db_cpu_f
from sys.V_$SYS_TIME_MODEL
where stat_name = 'DB CPU' ; /* end time */
Statystyki procesora ulegną zmianie, jeśli masz tylko 1 lub 8 procesorów. Musisz więc określić, ile procesorów wykorzystuje twój silnik.
Możesz zapytać „cpu_count” z V$PARAMETER, aby uzyskać tę wartość.
select value into t_cpus
from sys.v_$parameter
where name='cpu_count' ;
To całkiem proste:
Maksymalny całkowity czas będzie wynosił sekundy * liczba procesorów, więc jeśli masz tylko #1 procesor, maksymalny łączny czas wyniesie "60" , ale jeśli masz #2 procesor, maksymalny całkowity czas wyniesie "120" .. #3 procesory będzie "180" .. itd. ...
Więc bierzesz czas rozpoczęcia i czas zakończenia analizowanego okresu za pomocą sysdate:
t_start := sysdate ;
t_end := sysdate ;
A teraz obliczasz:
seconds_elapsed := (t_end - t_start)*24*60*60 ;
total_time := seconds_elapsed * t_cpus ;
used_cpu := t_db_cpu_f - t_db_cpu_i ;
secs_cpu := seconds_elapsed/1000000 ;
avgcpu := (secs_cpu/total_time)*100 ;
I to wszystko, „avgcpu” to wartość, której szukasz.