W tym poście przyjrzymy się różnym zapytaniom, aby pobrać historię zdarzeń oczekiwania sesji Oracle.
Historię zdarzeń oczekiwania w określonej sesji od początku można znaleźć za pomocą poniższego zapytania
ustaw linie 120 pula przycinania na
kol nagłówek zdarzenia „Oczekiwany na” format a30
kol total_waits nagłówek „Total|Waits” format 999,999
kol tw_ms nagłówek „Oczekiwany|na (ms)” format 999,999,99
col aw_ms nagłówek „Średnia|Oczekiwanie (ms)” format 999 999,99
col mw_ms nagłówek „Max|Oczekiwanie (ms)” format 999 999,99
wybierz zdarzenie, łącznie_oczekiwania, czas_oczekiwania10 tw_ms,
średnie_czekanie 10 aw_ms, max_wait*10 mw_ms
z v$session_event
gdzie sid =&1
/
Załóżmy, że chcemy zobaczyć historię zdarzeń oczekiwania sesji w określonym okresie, aby uzyskać zdarzenie oczekiwania tylko w tym okresie
Następnie możemy użyć poniższego zapytania ASH, aby wyodrębnić dane
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-RRRR HH24:MI:SS') AND
to_date('12-OCT-2016 15:04:00′,'DD-MON-RRRR HH24:MI:SS') oraz session_id=1853 i SESSION_SERIAL#=19 grupuj według zdarzenia;
LICZBA ZDARZEŃ( )
synchronizacja plików dziennika 88
SQL> SELECT module,count()
2 FROM dba_hist_active_sess_history a
3 GDZIE a.sample_time BETWEEN to_date('12-OCT-2016 11:49:00′,'DD-PON-RRRR HH24:MI:SS') AND
4 to_date('12-OCT-2016 15:04:00′,'DD-MON-RRRR HH24:MI:SS') oraz session_id=1853 i SESSION_SERIAL#=19 and event =grupowanie „synchronizacji pliku dziennika” według modułu;
LICZBA MODUŁÓW( )
e:FND:cp:FNDICM 88
Załóżmy, że chcemy poznać historię zdarzeń oczekiwania z ostatniej godziny, wtedy można użyć poniższego zapytania
kolumna sample_time format a30
wybierz sample_time, session_state, event, sql_id
z v$active_session_history
gdzie session_id =&1 i sample_time> SYSDATE – 30/(24*60)
uporządkuj według 1;
Ważny przypadek użycia techniki.
Załóżmy, że chcemy wiedzieć, na co czekała dana sesja w określonym czasie i co ją blokowało
Możemy użyć poniższego zapytania, aby uzyskać zdarzenie oczekiwania i inne ważne rzeczy
col format zdarzenia a30
col format czasu próbki a25
wybierz identyfikator_sesji, czas_przykładu, stan_sesji, zdarzenie, czas_oczekiwania, czas_oczekiwania, sql_id, sql_child_number CH#
z v$active_session_history
gdzie session_id =19
i sample_time between
do_date('9-DEC-16 01.215.00','dd-MON-yy hh:mi:ss PM')
a
do_date( '9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM')
uporządkuj według sample_time;
Teraz, jeśli zdarzenie to enq:TX – rywalizacja o blokadę wiersza, wiemy, że pewna sesja będzie ją blokować.
wybierz sample_time, session_state, blocking_session, current_obj#, current_file#, current_block#, current_row#
from v$active_session_history
gdzie sample_time między
do_date('9-DEC-16 01.25.00' ,'dd-PON-yy gg:mi:ss PM')
i
to_date('9-DEC-16 14:25:00','dd-MON-rrrr gg:mi:ss PM ')
i session_id =19
oraz event ='enq:TX – rywalizacja o blokadę wiersza'
kolejność według sample_time;
Blocking_session pokaże identyfikator sesji, w której sesja została zablokowana. Możemy wyodrębnić instrukcję sql również za pomocą sql_id uzyskanego powyżej dla zablokowanej sesji.
Podobne zapytania mogą być użyte do identyfikacji informacji dla sesji blokowania, a następnie podjęcia odpowiednich działań naprawczych
Ważne informacje
Musiałeś widzieć, że dla tych zapytań używaliśmy często aktywnej historii sesji i archiwum historii aktywnych sesji
Co to jest historia aktywnej sesji
Historia aktywnej sesji odpytuje bazę danych, aby zidentyfikować aktywne sesje i zrzuca odpowiednie informacje o każdej z nich — takie jak identyfikator użytkownika, stan, komputer, z którego jest połączony i wykonywany SQL — do specjalnego obszaru w systemie. obszar (SGA) instancji bazy danych zwany buforem ASH
Archiwum historii aktywnych sesji
Active Session History zbiera informacje o aktywnych sesjach z instancji bazy danych co sekundę. W zależności od aktywności bazy danych prowadzi to do dużej ilości danych gromadzonych w buforze ASH, ale ponieważ bufor ASH jest strukturą rezydującą w pamięci, ma tylko skończoną ilość miejsca. Ponadto, gdy instancja ulegnie awarii, jej pamięć znika wraz z nią. Dlatego Oracle Database archiwizuje informacje z bufora ASH w tabeli bazy danych, aby były trwałe. Te zarchiwizowane dane tabeli są widoczne w widoku o nazwie DBA_HIST_ACTIVE_SESS_HISTORY
Powiązane artykuły
Oracle ASH(Historia aktywnej sesji) Przydatne zapytania
Jak sprawdzić, która strona wykonuje pełne skanowanie tabeli
Jak znaleźć szczegóły sesji w bazie danych Oracle
Co to jest czas DB i średnia Aktywna sesja, Aktywna sesja w Oracle
jak znaleźć sesję generującą wiele powtórzeń