Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-CPU-Auslastung für Sitzungen als Prozentsatz anzeigen

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

abfragen
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-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.