In dit bericht zullen we kijken naar de verschillende vragen om de wachtgebeurtenisgeschiedenis van de Oracle-sessie op te halen.
De geschiedenis van wachtgebeurtenissen in een specifieke sessie vanaf het begin kan worden gevonden met behulp van onderstaande zoekopdracht
stel lijnen 120 in trimspool aan
col gebeurteniskop "Wacht op" formaat a30
col total_waits kop "Totaal|Wacht" formaat 999.999
col tw_ms kop "Wachtte|for (ms)" formaat 999.999,99
col aw_ms head "Gemiddelde|Wacht (ms)" formaat 999.999,99
col mw_ms head "Max|Wacht (ms)" formaat 999.999,99
select event, total_waits, time_waited10 tw_ms,
gemiddelde_wacht 10 aw_ms, max_wait*10 mw_ms
van v$session_event
waar sid =&1
/
Stel dat we de wachtgebeurtenisgeschiedenis van de sessie in een bepaalde periode willen zien om alleen de wachtgebeurtenis in die periode te krijgen
Dan kunnen we de onderstaande ASH-query gebruiken om de gegevens te extraheren
SQL> SELECT event,count()
FROM dba_hist_active_sess_history a
WHERE a.sample_time TUSSEN 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') en session_id=1853 en SESSION_SERIAL#=19 groeperen op gebeurtenis;
GEBEURTENIS AANTAL( )
logbestand synchroniseren 88
SQL> SELECT module,count()
2 FROM dba_hist_active_sess_history a
3 WHERE a.sample_time TUSSEN 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') en session_id=1853 en SESSION_SERIAL#=19 en event ='logbestand sync' groep per module;
MODULE COUNT( )
e:FND:cp:FNDICM 88
Stel dat we de geschiedenis van de wachtgebeurtenis van het laatste uur willen weten, dan kan onderstaande zoekopdracht worden gebruikt
kolom sample_time formaat a30
selecteer sample_time, session_state, event, sql_id
van v$active_session_history
waar session_id =&1 en sample_time> SYSDATE – 30/(24*60)
bestel op 1;
Belangrijke use case voor de techniek.
Stel dat we willen weten waar een bepaalde sessie op wachtte gedurende een bepaalde periode en wat de sessie blokkeerde
We kunnen onderstaande zoekopdracht gebruiken om een wachtgebeurtenis en andere belangrijke dingen te krijgen
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#
van v$active_session_history
waar session_id =19
en sample_time tussen
to_date('9-DEC-16 01.25.00 PM','dd-MON-yy hh:mi:ss PM')
en
to_date( '9-DEC-16 02.25.00 PM','dd-MON-yy uu:mi:ss PM')
bestel op sample_time;
Als de gebeurtenis nu nlq:TX - rijvergrendelingsconflict is, weten we dat een bepaalde sessie deze blokkeert.
selecteer sample_time, session_state, blocking_session, current_obj#, current_file#, current_block#, current_row#
van v$active_session_history
waar sample_time between
to_date('9-DEC-16 01.25 uur' ,'dd-MON-yy uu:mi:ss PM')
en
to_date('9-DEC-16 02.25.00 PM','dd-MON-yy uu:mi:ss PM ')
and session_id =19
and event ='enq:TX – row lock-conflict'
bestellen op sample_time;
Blocking_session toont de sessie-ID waarmee de sessie werd geblokkeerd. We kunnen de sql-instructie ook extraheren met behulp van de hierboven verkregen sql_id voor de geblokkeerde sessie.
Vergelijkbare zoekopdrachten kunnen worden gebruikt om de informatie voor de blokkeringssessie te identificeren en vervolgens passende corrigerende maatregelen te nemen
Belangrijke informatie
Je moet hebben gezien dat we vaak actieve sessiegeschiedenis en actief sessiegeschiedenisarchief hebben gebruikt voor deze vragen
Wat is actieve sessiegeschiedenis
Actieve sessiegeschiedenis peilt de database om de actieve sessies te identificeren en dumpt relevante informatie over elk van hen - zoals de gebruikers-ID, status, de machine waarmee het is verbonden en de SQL die het uitvoert - in een speciaal gebied in het globale systeem gebied (SGA) van de database-instantie genaamd de ASH-buffer
Archief actieve sessiegeschiedenis
Actieve sessiegeschiedenis verzamelt elke seconde informatie over actieve sessies uit de database-instantie. Afhankelijk van de database-activiteit zal dat leiden tot veel gegevens die in de ASH-buffer worden verzameld, maar omdat de ASH-buffer een geheugenresidente structuur is, heeft deze slechts een eindige hoeveelheid ruimte. Bovendien, wanneer de instantie uitvalt, verdwijnt het geheugen van de instantie mee. Daarom archiveert Oracle Database de informatie uit de ASH-buffer naar een databasetabel om deze persistent te maken. Deze gearchiveerde tabelgegevens zijn zichtbaar in een weergave met de naam DBA_HIST_ACTIVE_SESS_HISTORY
Gerelateerde artikelen
Oracle ASH (Active Session History) Nuttige vragen
Hoe te vinden welke sid de volledige tafel scant
Sessiedetails vinden in de Oracle-database
Wat is DB-tijd en gemiddelde actieve sessies, actieve sessie in orakel
hoe een sessie te vinden die veel herhalingen genereert