Накратко:няма да можете да го направите с една заявка, ще трябва да напишете PL/SQL, за да съберете полезни данни, за да получите полезна информация.
Oracle има статистика за "натрупано време", което означава, че двигателят поддържа непрекъснато проследяване на употребата. Ще трябва да определите начален и краен час за анализ.
Можете да направите заявка за 'DB CPU' от 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 */
Статистиката на CPU ще бъде засегната, ако имате само #1 CPU или #8 CPU. Така че ще трябва да определите колко процесора използва вашата машина.
Можете да поискате 'cpu_count' от V$PARAMETER, за да получите тази стойност.
select value into t_cpus
from sys.v_$parameter
where name='cpu_count' ;
След това е съвсем просто:
Максималното общо време ще бъде секунди * брой CPU, така че ако имате само #1 CPU, тогава максималното общо време ще бъде "60", но ако имате #2 CPU, тогава максималното общо време ще бъде "120" .. #3 CPU ще бъде "180" .. и т.н. ...
Така че взимате начален и краен час на анализирания период, като използвате sysdate:
t_start := sysdate ;
t_end := sysdate ;
И сега изчислявате следното:
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 ;
И това е всичко, "avgcpu" е стойността, която търсите.