Stručně řečeno:nebudete to moci udělat s jediným dotazem, budete muset napsat PL/SQL, abyste shromáždili užitečná data, abyste získali užitečné informace.
Oracle má statistiky „akumulovaného času“, což znamená, že motor neustále sleduje používání. Budete muset definovat čas zahájení a čas ukončení analýzy.
Můžete se dotazovat na 'DB CPU' 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 */
Statistiky CPU budou ovlivněny, pokud máte pouze #1 CPU nebo #8 CPU. Takže budete muset určit, kolik CPU váš engine používá.
Tuto hodnotu můžete získat dotazem 'cpu_count' z V$PARAMETER.
select value into t_cpus
from sys.v_$parameter
where name='cpu_count' ;
Pak je to docela jednoduché:
Maximální celkový čas bude sekund * počet CPU, takže pokud máte pouze #1 CPU, pak maximální celkový čas bude "60", ale pokud máte #2 CPU, pak maximální celkový čas bude "120" .. #3 CPU bude "180" .. atd. ...
Takže vezmete čas začátku a konce analyzovaného období pomocí sysdate:
t_start := sysdate ;
t_end := sysdate ;
A nyní vypočítejte následující:
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 ;
A je to, "avgcpu" je hodnota, kterou hledáte.