Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak znaleźć Waitevent Historia sesji Oracle

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ń


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sprawdź, czy jest to funkcja liczbowa w Oracle

  2. Jakich kryteriów zamówienia używa LITAGG z ORDER BY NULL?

  3. Wywołanie niezdefiniowanej funkcji oci_connect()

  4. Funkcja COMPOSE() w Oracle

  5. Funkcja NLS_LOWER() w Oracle