Um es kurz zu machen:Sie werden es nicht mit einer einzigen Abfrage schaffen, Sie müssen ein PL/SQL schreiben, um nützliche Daten zu sammeln, um nützliche Informationen zu erhalten.
Oracle verfügt über „akkumulierte Zeit“-Statistiken, was bedeutet, dass die Engine die Nutzung kontinuierlich verfolgt. Sie müssen eine Startzeit und eine Endzeit für die Analyse definieren.
Sie können 'DB CPU' von V$SYS_TIME_MODEL
abfragenselect 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 */
CPU-Statistiken werden beeinflusst, wenn Sie nur #1 CPU oder #8 CPUs haben. Sie müssen also bestimmen, wie viele CPUs Ihre Engine verwendet.
Sie können 'cpu_count' von V$PARAMETER abfragen, um diesen Wert zu erhalten.
select value into t_cpus
from sys.v_$parameter
where name='cpu_count' ;
Dann ist es ganz einfach:
Die maximale Gesamtzeit beträgt Sekunden * Anzahl der CPUs. Wenn Sie also nur CPU Nr. 1 haben, beträgt die maximale Gesamtzeit "60". Wenn Sie jedoch CPUs Nr. 2 haben, beträgt die maximale Gesamtzeit "120" .. CPUs Nr. 3 wird "180" sein .. usw. ...
Sie nehmen also Startzeit und Endzeit des analysierten Zeitraums mit sysdate:
t_start := sysdate ;
t_end := sysdate ;
Und jetzt berechnen Sie Folgendes:
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 ;
Und das war's, "avgcpu" ist der gesuchte Wert.