sql >> Databáze >  >> RDS >> Oracle

Jak najít historii waitevent relace Oracle

V tomto příspěvku se podíváme na různé dotazy k načtení historie událostí čekání relace Oracle.

Historie událostí čekání v konkrétní relaci od začátku lze nalézt pomocí níže uvedeného dotazu

nastavit řádky 120 trimspool on
sloupec hlavička události “Waited for” formát a30
col total_waits head “Total|Waits” formát 999 999
col tw_ms head “Waited|for (ms)” formát 999 999,99
col aw_ms head “Average|Wait (ms)” formát 999,999,99
col mw_ms head “Max|Wait (ms)” formát 999,999,99
select event, total_waits, time_waitedprůměrné_čekání 10 aw_ms, max_wait*10 mw_ms
z v$session_event
kde sid =&1
/

Předpokládejme, že chceme vidět historii událostí čekání relace v konkrétním období, abychom získali událost čekání pouze v tomto období

Poté můžeme použít níže uvedený dotaz ASH k extrahování dat

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') a session_id=1853 a SESSION_SERIAL#=19 seskupit podle události;
POČET UDÁLOSTÍ(
)

synchronizace souboru protokolu 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') and session_id=1853 a SESSION_SERIAL#=19 a událost ='synchronizace souboru protokolu' seskupení podle modulu;
POČET MODULU(
)

e:FND:cp:FNDICM 88

Předpokládejme, že chceme znát historii událostí čekání za poslední hodinu, pak lze použít níže uvedený dotaz

sloupec sample_time format a30
vyberte sample_time, session_state, event, sql_id
z v$active_session_history
kde session_id =&1 a sample_time> SYSDATE – 30/(24*60)
objednejte do 1;

Důležitý případ použití pro tuto techniku.

Předpokládejme, že chceme vědět, na co konkrétní relace během určitého období čekala a co ji blokovalo

Níže uvedený dotaz můžeme použít k získání události čekání a dalších důležitých věcí

formát události col a30
formát col sample_time a25
select session_id, sample_time, session_state, event, wait_time, time_waited, sql_id, sql_child_number CH#
z v$active_session_history
kde session_id =19
a sample_time mezi
to_date('9-DEC-16 01.25.00 PM','dd-MON-yy hh:mi:ss PM')
a
to_date( '9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM')
objednejte podle sample_time;

Nyní, pokud je událost enq:TX – spor o zámek řádku, víme, že určitá relace to bude blokovat.

vyberte sample_time, session_state, blocking_session, current_obj#, current_file#, current_block#, current_row#
z v$active_session_history
kde sample_time between
to_date('9-DEC-16 01.25.00 PM' ,'dd-MON-yy hh:mi:ss PM')
a
to_date('9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM ')
a session_id =19
a event ='enq:TX – spor o zámek řádku'
seřadit podle sample_time;

Blocking_session zobrazí ID relace, která byla relace zablokována. Můžeme extrahovat příkaz sql také pomocí sql_id získaného výše pro blokovanou relaci.

Podobné dotazy lze použít k identifikaci informací pro blokující relaci a poté k provedení vhodných nápravných opatření

Důležité informace

Určitě jste viděli, že jsme pro tyto dotazy používali často aktivní historii relací a archiv historie aktivních relací

Co je Historie aktivních relací

Historie aktivních relací dotazuje databázi, aby identifikovala aktivní relace a ukládá relevantní informace o každé z nich – jako je ID uživatele, stav, počítač, ze kterého je připojen, a SQL, který provádí – do speciální oblasti v globálním systému. oblast (SGA) instance databáze s názvem ASH buffer

Archiv historie aktivních relací

Active Session History shromažďuje informace o aktivních relacích z instance databáze každou sekundu. V závislosti na aktivitě databáze to povede k velkému množství dat shromážděných uvnitř vyrovnávací paměti ASH, ale protože je vyrovnávací paměť ASH strukturou rezidentní v paměti, má pouze omezené množství prostoru. Navíc, když instance selže, zmizí s ní i její paměť. Oracle Database proto archivuje informace z vyrovnávací paměti ASH do databázové tabulky, aby byly trvalé. Tato archivovaná data tabulky jsou viditelná v zobrazení s názvem DBA_HIST_ACTIVE_SESS_HISTORY

Související články

Oracle ASH (Active Session History) Užitečné dotazy

Jak zjistit, která strana provádí úplný sken tabulky

Jak najít podrobnosti o relaci v databázi Oracle

Co je čas DB a Průměrná aktivní relace, Aktivní relace v oracle

jak najít relaci generující spoustu opakování


  1. SQL IN operátor pro začátečníky

  2. Únik z jednoduché uvozovky v PHP při vkládání do MySQL

  3. Existuje v některých verzích Oracle limit vnoření pro korelované poddotazy?

  4. stránkování v zobrazení seznamu