Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Mostrar o uso da CPU Oracle para sessões como porcentagem


Para encurtar a história:você não poderá fazer isso com uma única consulta, precisará escrever um PL/SQL para coletar dados úteis para obter informações úteis.

A Oracle possui estatísticas de "tempo acumulado", isso significa que o mecanismo mantém um controle contínuo de uso. Você terá que definir uma hora de início e uma hora de término para análise.

Você pode consultar 'DB CPU' 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 */

As estatísticas da CPU serão afetadas se você tiver apenas #1 CPU ou #8 CPUs. Portanto, você terá que determinar quantas CPUs seu mecanismo está usando.

Você pode consultar 'cpu_count' de V$PARAMETER para obter este valor.
select value into t_cpus
from sys.v_$parameter
where name='cpu_count' ;

Então, é bem simples:

O tempo total máximo será segundos * número de CPUs, portanto, se você tiver apenas #1 CPU, o tempo total máximo será "60" , mas se você tiver #2 CPUs, o tempo total máximo será "120" .. #3 CPUs será "180" .. etc. ...

Então você pega a hora de início e a hora de término do período analisado usando sysdate:
t_start := sysdate ;
t_end := sysdate ;

E agora você calcula o seguinte:
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 ;

E pronto, "avgcpu" é o valor que você procura.