Poiché i campioni di Oracle e registra ogni sessione attiva in esecuzione sul database , una semplice query consente di ottenere la storia delle istruzioni SQL all'interno di un determinato intervallo di tempo . Importanza
Oracle campioni automaticamente ogni sessione in esecuzione sul database ogni secondo , e record SQL informazioni storia nel v $ active_session_history vista del dizionario dati . v $ active_session_history è un buffer circolare , in modo che quando si riempie, Oracle archivi automaticamente le informazioni da v $ active_session_history ai dati dba_hist_active_sess_history vista dizionario , prima di sovrascrivere i dati in v $ vista active_session_history .
Funzione < br >
interrogando questi due punti di vista , la storia di istruzioni SQL eseguite in un determinato lasso di tempo sulla base di dati può essere ottenuto. Ad esempio , la query seguente restituisce l' elenco dei primi 4.000 caratteri di istruzioni SQL eseguite 09:00-09:05 il 30 settembre 2010:
select a.sql_id , dbms_lob.substr ( b. SQL_TEXT , 4000,1 ) da un dba_hist_active_sess_history , dba_hist_sqltext b
dove sample_time tra to_date ( '20100930 : 09:00 ',' aaaammgg : hh24 : mi ' ) per
e to_date ( '20100930 : 09:01 ',' aaaammgg : hh24 : mi ' ) e b.sql_id = a.sql_id
unione in tutte le nazioni
select a.sql_id , dbms_lob.substr ( b.sql_text , 4000 , 1 ) da v $ active_session_history a, v $ sqlarea b
dove sample_time tra to_date ( '20100930 : 09:00 ',' aaaammgg : hh24 : mi ' ) e
to_date ( ' 20100930:09:01 ',' aaaammgg : hh24 : mi ' ) e b.sql_id = a.sql_id
Considerazioni
Inoltre , Oracle riassume statistiche di esecuzione orarie di istruzioni SQL nella sua Automatic Workload Repository . Si potrebbe trovare le istruzioni SQL più intensivo di risorse eseguiti nel corso di una determinata finestra di tempo interrogando dizionario dati dba_hist_sqlstat vista lungo con dba_hist_snapshot vista del dizionario dati .
Effetti
Ad esempio , la query seguente fornisce l'elenco di istruzioni SQL eseguite 09:00-10:00 con il loro tempo di CPU , il tempo trascorso, il tempo e il numero di io_wait diskreads . L'output di questa query è ordinato per tempo di CPU .
Selezionare da dba_hist_sqlstat una , dba_hist_sqltext b dove a.sql_id = b.sql_id e snap_id = ( selezionare snap_id distinto da dba_hist_snapshot dove to_char ( begin_interval_time , ' aaaammgg : hh24 : mi' ) = '20100930 : 09:00 ' e to_char ( end_interval_time , ' aaaammgg : hh24 : mi ' ) = '20100930 : 10:00 ' ) order by cpu_time
/