sql >> Databasteknik >  >> RDS >> Oracle

Hur man hittar waitevent History of the Oracle-session

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


  1. Showplan Förbättringar för UDF:er

  2. Hur man visar ett datum i brittiskt format i SQL Server (T-SQL)

  3. Installation av specifika paketversioner med pip

  4. Lagra procedurer i phpMyAdmin