Oracle
 sql >> Database >  >> RDS >> Oracle

Come trovare la cronologia waitevent della sessione Oracle

In questo post, esamineremo le diverse query per recuperare la cronologia degli eventi di attesa della sessione Oracle.

La cronologia degli eventi di attesa in una sessione specifica dall'inizio può essere trovata utilizzando la query di seguito

set lines 120 trimspool on
col event head “Waited for” format a30
col total_waits head “Total|Waits” format 999.999
col tw_ms head “Waited|for (ms)” format 999.999,99
col aw_ms head formato “Average|Wait (ms)” 999.999,99
col mw_ms head formato “Max|Wait (ms)” 999.999,99
select event, total_waits, time_waited10 tw_ms,
average_wait
10 aw_ms, max_wait*10 mw_ms
da v$session_event
dove sid =&1
/

Supponiamo di voler visualizzare la cronologia degli eventi di attesa della sessione in un determinato periodo per ottenere l'evento di attesa solo in quel periodo

Quindi possiamo utilizzare la query ASH di seguito per estrarre i dati

SQL> SELECT event,count()
DA dba_hist_active_sess_history a
WHERE a.sample_time BETWEEN to_date('12-OCT-2016 11:49:00′,'DD-MON-YYYY HH24:MI:SS') AND
to_date('12-OCT-2016 15:04:00′,'DD-MON-YYYY HH24:MI:SS') e session_id=1853 e SESSION_SERIAL#=19 raggruppa per evento;
CONTEGGIO EVENTI(
)

sincronizzazione del file di registro 88

SQL> SELECT module,count()
2 FROM dba_hist_active_sess_history a
3 WHERE a.sample_time BETWEEN to_date('12-OCT-2016 11:49:00′,'DD-MON-YYYY HH24:MI:SS') AND
4 to_date('12-OCT-2016 15:04:00′,'DD-MON-YYYY HH24:MI:SS') e session_id=1853 e SESSION_SERIAL#=19 and event ='sincronizzazione file di registro' gruppo per modulo;
MODULE COUNT(
)

e:FND:cp:FNDCM 88

Supponiamo di voler conoscere la cronologia degli eventi di attesa dell'ultima ora, quindi è possibile utilizzare la query seguente

colonna sample_time format a30
seleziona sample_time, session_state, event, sql_id
da v$active_session_history
dove session_id =&1 e sample_time> SYSDATE – 30/(24*60)
ordina per 1;

Caso d'uso importante per la tecnica.

Supponiamo di voler sapere quale sessione era in attesa durante un determinato periodo e cosa la bloccava

Possiamo utilizzare la query di seguito per ottenere l'evento di attesa e altre cose importanti

col event format a30
col sample_time format a25
select session_id, sample_time, session_state, event, wait_time, time_waited, sql_id, sql_child_number CH#
from v$active_session_history
dove session_id =19
e sample_time tra
to_date('9-DEC-16 01.25.00 PM','dd-MON-yy hh:mi:ss PM')
e
to_date( '9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM')
ordina per sample_time;

Ora, se l'evento è enq:TX – contesa per il blocco delle righe, sappiamo che una determinata sessione lo bloccherà.

seleziona sample_time, session_state, blocking_session, current_obj#, current_file#, current_block#, current_row#
da v$active_session_history
dove sample_time tra
to_date('9-DEC-16 01.25.00 PM' ,'dd-MON-yy hh:mi:ss PM')
and
to_date('9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM ')
e session_id =19
and event ='enq:TX – row lock contenzioso'
ordina per sample_time;

Blocking_session mostrerà l'ID della sessione in cui la sessione è stata bloccata. Possiamo estrarre l'istruzione sql anche utilizzando sql_id ottenuto sopra per la sessione bloccata.

Query simili possono essere utilizzate per identificare le informazioni per la sessione di blocco e quindi intraprendere le azioni correttive adeguate

Informazioni importanti

Devi aver visto che abbiamo utilizzato la cronologia delle sessioni attive di frequente e l'archivio della cronologia delle sessioni attive per queste query

Cos'è la Cronologia sessioni attive

La cronologia delle sessioni attive esegue il polling del database per identificare le sessioni attive e scarica le informazioni rilevanti su ciascuna di esse, come l'ID utente, lo stato, la macchina da cui è connesso e l'SQL che sta eseguendo, in un'area speciale nel sistema globale area (SGA) dell'istanza del database denominata buffer ASH

Archivio cronologia sessioni attive

La cronologia delle sessioni attive raccoglie informazioni sulle sessioni attive dall'istanza del database ogni secondo. A seconda dell'attività del database, ciò porterà alla raccolta di molti dati all'interno del buffer ASH, ma poiché il buffer ASH è una struttura residente in memoria, ha solo una quantità limitata di spazio. Inoltre, quando l'istanza si interrompe, la memoria dell'istanza svanisce con essa. Pertanto, Oracle Database archivia le informazioni dal buffer ASH in una tabella di database per renderle persistenti. Questi dati di tabella archiviati sono visibili in una vista denominata DBA_HIST_ACTIVE_SESS_HISTORY

Articoli correlati

Oracle ASH(Active Session History) Query utili

Come scoprire quale sid sta eseguendo la scansione completa della tabella

Come trovare i dettagli della sessione nel database Oracle

Che cos'è il tempo DB e sessioni attive medie, sessione attiva in Oracle

come trovare sessioni che generano molte ripetizioni