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