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

Sådan finder du waitevent History of the Oracle session

I dette indlæg vil vi se på de forskellige forespørgsler for at hente ventehistorien for Oracle-sessionen.

Historie over ventehændelser i en specifik session fra starten kan findes ved at bruge nedenstående forespørgsel

sæt linjer 120 trimspool på
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 "Average|Wait (ms)"-format 999.999.99
col mw_ms head "Max|Wait (ms)"-format 999.999.99
vælg begivenhed, total_waits, time_waited10 tw_ms,
gennemsnitlig ventetid
10 aw_ms, max_wait*10 mw_ms
fra v$session_event
hvor sid =&1
/

Antag, at vi ønsker at se ventehændelseshistorikken for sessionen i en bestemt periode for kun at få ventehændelsen i den periode

Så kan vi bruge nedenstående ASH-forespørgsel til at udtrække dataene

SQL> SELECT event,count()
FROM 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') og session_id=1853 og SESSION_SERIAL#=19 grupper efter begivenhed;
ANTAL BEGIVENHEDER(
)

logfil synkronisering 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') OG
4 to_date('12-OCT-2016 15:04:00′,'DD-MON-YYYY HH24:MI:SS') og session_id=1853 og SESSION_SERIAL#=19 og hændelse ='logfilsynkronisering' grupper efter modul;
MODULANTAL(
)

e:FND:cp:FNDICM 88

Antag, at vi ønsker at kende ventehændelseshistorikken fra sidste time, så kan nedenstående forespørgsel bruges

kolonne sample_time format a30
vælg sample_time, session_state, event, sql_id
fra v$active_session_history
hvor session_id =&1 og sample_time> SYSDATE – 30/(24*60)
bestil efter 1;

Vigtig brug af teknikken.

Antag, at vi gerne vil vide, hvad en bestemt session ventede på i en bestemt periode, og hvad der blokerede den

Vi kan bruge nedenstående forespørgsel til at få ventebegivenhed og andre vigtige ting

col hændelsesformat a30
col sample_time format a25
vælg session_id, sample_time, session_state, event, wait_time, time_waited, sql_id, sql_child_number CH#
fra v$active_session_history
hvor session_id =19
and sample_time between
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')
bestil efter sample_time;

Hvis begivenheden nu er enq:TX – rækkelås-påstand, ved vi, at en bestemt session vil blokere den.

vælg sample_time, session_state, blocking_session, current_obj#, current_file#, current_block#, current_row#
fra v$active_session_history
hvor sample_time between
to_date('9-DEC-16 01.25.00 PM' ,'dd-MAN-åå tt:mi:ss PM')
og
to_date('9-DEC-16 02.25.00 PM','dd-MON-yy tt:mi:ss PM ')
og session_id =19
og hændelse ='enq:TX – rækkelåspåstand'
bestil efter sample_time;

Blocking_session vil vise det sessions-id, som sessionen blev blokeret. Vi kan også udtrække sql-sætningen ved at bruge sql_id opnået ovenfor for den blokerede session.

Lignende forespørgsler kan bruges til at identificere oplysningerne for blokeringssessionen og derefter træffe passende korrigerende handlinger

Vigtige oplysninger

Du skal have set, at vi ofte har brugt aktiv sessionshistorik og aktivt sessionshistorikarkiv til disse forespørgsler

Hvad er Active Session History

Active Session History poller databasen for at identificere de aktive sessioner og dumper relevant information om hver af dem - såsom bruger-id, tilstand, den maskine, den er forbundet fra, og den SQL, den udfører - i et særligt område i systemets globale område (SGA) af databaseinstansen kaldet ASH buffer

Aktiv sessionshistorikarkiv

Active Session History indsamler oplysninger om aktive sessioner fra databaseforekomsten hvert sekund. Afhængigt af databaseaktiviteten vil det føre til en masse data indsamlet inde i ASH-bufferen, men fordi ASH-bufferen er en hukommelsesresident struktur, har den kun en begrænset mængde plads. Derudover, når instansen går ned, forsvinder instansens hukommelse med den. Derfor arkiverer Oracle Database oplysningerne fra ASH-bufferen til en databasetabel for at gøre den vedvarende. Disse arkiverede tabeldata er synlige i en visning kaldet DBA_HIST_ACTIVE_SESS_HISTORY

Relaterede artikler

Oracle ASH(Active Session History) Nyttige forespørgsler

Sådan finder du, hvilken side der laver fuld bordscanning

Sådan finder du sessionsdetaljer i Oracle-databasen

Hvad er DB-tid og gennemsnitlige aktive sessioner, aktiv session i oracle

hvordan man finder session, der genererer masser af redo


  1. MySQL strip ikke-numeriske tegn for at sammenligne

  2. At overleve en Oracle Audit

  3. Indsæt/opdater hjælpefunktion ved hjælp af PDO

  4. Sådan installeres SQL Server på en Mac