I det här inlägget kommer vi att titta på de olika frågorna för att hämta väntehändelshistoriken för Oracle-sessionen.
Historik över väntehändelser i en specifik session från början kan hittas med hjälp av nedanstående fråga
ange rader 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älj händelse, total_waits, time_waited10 tw_ms,
average_wait 10 aw_ms, max_wait*10 mw_ms
från v$session_event
där sid =&1
/
Anta att vi vill se historiken för väntehändelser för sessionen i en viss period för att få vänthändelsen endast under den perioden
Sedan kan vi använda nedanstående ASH-fråga för att extrahera data
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') och session_id=1853 och SESSION_SERIAL#=19 grupp efter händelse;
ANTAL HÄNDELSER ( )
loggfilsynk 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') och session_id=1853 och SESSION_SERIAL#=19 och händelse ='loggfilsynk' gruppera efter modul;
MODULANTAL( )
e:FND:cp:FNDICM 88
Anta att vi vill veta väntehändelshistoriken från den senaste timmen, då kan nedanstående fråga användas
kolumn sample_time format a30
välj sample_time, session_state, event, sql_id
från v$active_session_history
där session_id =&1 och sample_time> SYSDATE – 30/(24*60)
beställ efter 1;
Viktigt användningsfall för tekniken.
Anta att vi vill veta vad en viss session väntade på under en viss period och vad som blockerade den
Vi kan använda nedanstående fråga för att få vänta-evenemang och andra viktiga saker
col event format a30
col sample_time format a25
välj session_id, sample_time, session_state, event, wait_time, time_waited, sql_id, sql_child_number CH#
från v$active_session_history
där session_id =19
och 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')
beställ efter sample_time;
Om händelsen nu är enq:TX – row lock contention, vet vi att en viss session kommer att blockera det.
välj sample_time, session_state, blocking_session, current_obj#, current_file#, current_block#, current_row#
från v$active_session_history
där sample_time between
to_date('9-DEC-16 01.25.00 PM' ,'dd-MÅN-åå hh:mi:ss PM')
och
to_date('9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM ')
och session_id =19
och händelse ='enq:TX – radlåskonflikt'
ordning efter sample_time;
Blocking_session kommer att visa sessions-id som sessionen blockerades. Vi kan extrahera sql-satsen också med sql_id som erhållits ovan för den blockerade sessionen.
Liknande frågor kan användas för att identifiera informationen för blockeringssessionen och sedan vidta lämpliga korrigerande åtgärder
Viktig information
Du måste ha sett att vi ofta har använt aktiv sessionshistorik och aktivt sessionshistorikarkiv för dessa frågor
Vad är Active Session History
Active Session History pollar databasen för att identifiera de aktiva sessionerna och dumpar relevant information om var och en av dem – som användar-ID, status, maskinen den är ansluten från och SQL den kör – till ett speciellt område i systemets globala område (SGA) för databasinstansen som kallas ASH-bufferten
Aktiv sessionshistorikarkiv
Active Session History samlar in information om aktiva sessioner från databasinstansen varje sekund. Beroende på databasaktiviteten kommer det att leda till att mycket data samlas in i ASH-bufferten, men eftersom ASH-bufferten är en minnesresidenten struktur har den bara en begränsad mängd utrymme. Dessutom, när instansen går ner, försvinner instansens minne med den. Därför arkiverar Oracle Database informationen från ASH-bufferten till en databastabell för att göra den beständig. Denna arkiverade tabelldata är synlig i en vy som heter DBA_HIST_ACTIVE_SESS_HISTORY
Relaterade artiklar
Oracle ASH(Active Session History) Användbara frågor
Hur man hittar vilken sida som gör full bordsskanning
Hur man hittar sessionsdetaljer i Oracle-databasen
Vad är DB-tid och genomsnittliga aktiva sessioner, aktiv session i oracle
hur man hittar session som genererar massor av redo