sql >> Base de Datos >  >> RDS >> Oracle

Mostrar el uso de CPU de Oracle para sesiones como porcentaje

Para resumir:no podrá hacerlo con una sola consulta, deberá escribir un PL/SQL para recopilar datos útiles para obtener información útil.

Oracle tiene estadísticas de "tiempo acumulado", esto significa que el motor lleva un registro continuo de uso. Deberá definir una hora de inicio y una hora de finalización para el análisis.

Puede consultar 'CPU DB' desde 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 */

Las estadísticas de la CPU se verán afectadas si solo tiene la CPU n.º 1 o la CPU n.º 8. Por lo tanto, tendrá que determinar cuántas CPU usa su motor.

Puede consultar 'cpu_count' desde V$PARAMETER para obtener este valor.

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

Entonces, es bastante simple:

El tiempo total máximo será segundos * número de CPU, por lo que si solo tiene la CPU n. ° 1, el tiempo total máximo sería "60", pero si tiene las CPU n. ° 2, el tiempo total máximo sería "120". .. CPU n. ° 3 será "180" .. etc. ...

Entonces, toma la hora de inicio y la hora de finalización del período analizado usando sysdate:

t_start := sysdate ;
t_end := sysdate ;

Y ahora calculas lo siguiente:

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 ;

Y listo, "avgcpu" es el valor que buscas.