Oracle
 sql >> Base de données >  >> RDS >> Oracle

Afficher l'utilisation du processeur Oracle pour les sessions en pourcentage

Pour faire court :vous ne pourrez pas le faire avec une seule requête, vous devrez écrire un PL/SQL pour collecter des données utiles afin d'obtenir des informations utiles.

Oracle a des statistiques de "temps accumulé", cela signifie que le moteur garde une trace continue de l'utilisation. Vous devrez définir une heure de début et une heure de fin pour l'analyse.

Vous pouvez interroger 'DB CPU' à partir de 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 */

Les statistiques du processeur seront affectées si vous n'avez que le processeur #1 ou les processeurs #8. Vous devrez donc déterminer le nombre de processeurs utilisés par votre moteur.

Vous pouvez interroger 'cpu_count' à partir de V$PARAMETER pour obtenir cette valeur.

select value into t_cpus
from sys.v_$parameter
where name='cpu_count' ;

Ensuite, c'est assez simple :

Le temps total maximum sera de secondes * nombre de processeurs, donc si vous n'avez que le processeur #1, le temps total maximum serait de "60", mais si vous avez des processeurs #2, le temps total maximum serait de "120" .. #3 CPU sera "180" .. etc. ...

Vous prenez donc l'heure de début et l'heure de fin de la période analysée à l'aide de sysdate :

t_start := sysdate ;
t_end := sysdate ;

Et maintenant vous calculez ce qui suit :

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 ;

Et c'est tout, "avgcpu" est la valeur que vous recherchez.