sql >> Database >  >> RDS >> Oracle

Oracle CPU-gebruik voor sessies als percentage weergeven

Om een ​​lang verhaal kort te maken:je zult het niet kunnen doen met een enkele query, je moet een PL/SQL schrijven om nuttige gegevens te verzamelen om nuttige informatie te verkrijgen.

Oracle heeft statistieken over "geaccumuleerde tijd", dit betekent dat de engine continu het gebruik bijhoudt. U moet een starttijd en een eindtijd definiëren voor analyse.

U kunt 'DB CPU' opvragen vanuit 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 */

CPU-statistieken worden beïnvloed als u slechts #1 CPU of #8 CPU's heeft. U zult dus moeten bepalen hoeveel CPU's uw engine gebruikt.

U kunt 'cpu_count' van V$PARAMETER opvragen om deze waarde te verkrijgen.

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

Dan is het heel eenvoudig:

Maximale totale tijd is seconden * aantal CPU's, dus als je slechts #1 CPU hebt, dan zou de maximale totale tijd "60" zijn, maar als je #2 CPU's hebt, zou de maximale totale tijd "120" zijn. #3 CPU's zal "180" zijn .. etc. ...

Dus je neemt de starttijd en eindtijd van de geanalyseerde periode met behulp van sysdate:

t_start := sysdate ;
t_end := sysdate ;

En nu bereken je het volgende:

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 ;

En dat is alles, "avgcpu" is de waarde die u zoekt.




  1. Postgresql:Geen toegang tot bestand « $libdir/postgis-2.1 » geen dergelijk bestand of map

  2. Vraag met dubbel resultaat?

  3. hoe XML-waardeveld te extraheren met in sql-server (extractvalue-functie in mysql)

  4. Werken met datums in PostgreSQL