Moja aplikacja korzystająca z bazy danych Oracle działa wolno lub wygląda na to, że całkowicie się zatrzymała.
Jak mogę się dowiedzieć, które zapytania są najdroższe, abym mógł to zbadać dalej?
Ten pokazuje SQL, który jest obecnie „AKTYWNY”: -
select S.USERNAME, s.sid, s.osuser, t.sql_id, sql_text
from v$sqltext_with_newlines t,V$SESSION s
where t.address =s.sql_address
and t.hash_value = s.sql_hash_value
and s.status = 'ACTIVE'
and s.username <> 'SYSTEM'
order by s.sid,t.piece
/
To pokazuje zamki. Czasami sprawy idą wolno, ale dzieje się tak, ponieważ jest zablokowany, czekając na blokadę:
select
object_name,
object_type,
session_id,
type, -- Type or system/user lock
lmode, -- lock mode in which session holds lock
request,
block,
ctime -- Time since current mode was granted
from
v$locked_object, all_objects, v$lock
where
v$locked_object.object_id = all_objects.object_id AND
v$lock.id1 = all_objects.object_id AND
v$lock.sid = v$locked_object.session_id
order by
session_id, ctime desc, object_name
/
Jest to dobre rozwiązanie do wyszukiwania długich operacji (np. Pełne skanowanie tabeli). Jeśli dzieje się tak z powodu wielu krótkich operacji, nic się nie pojawi.
COLUMN percent FORMAT 999.99
SELECT sid, to_char(start_time,'hh24:mi:ss') stime,
message,( sofar/totalwork)* 100 percent
FROM v$session_longops
WHERE sofar/totalwork < 1
/
alter system kill session
zgodnie z opisem tutaj: docs.oracle.com/cd/B28359_01/server.111/b28310/…Spróbuj tego, a otrzymasz zapytania trwające obecnie dłużej niż 60 sekund. Zauważ, że drukuje wiele wierszy na uruchomione zapytanie, jeśli SQL ma wiele wierszy. Spójrz na sid, numer seryjny, aby zobaczyć, co należy do siebie.
źródło
v $ session_longops
Jeśli szukasz sofar! = Totalwork, zobaczysz te, które nie zostały ukończone, ale wpisy nie zostaną usunięte po zakończeniu operacji, więc możesz tam również zobaczyć dużo historii.
źródło
źródło
Możesz wygenerować raport AWR (automatyczne repozytorium obciążenia) z bazy danych.
Uruchom z wiersza poleceń SQL * Plus:
Przeczytaj dokument dotyczący sposobu generowania i rozumienia raportu AWR. Zapewnia pełny obraz wydajności bazy danych i problemów z zasobami. Gdy już zapoznamy się z raportem AWR, pomocne będzie znalezienie Top SQL, który zużywa zasoby.
Ponadto w interfejsie użytkownika 12C EM Express możemy wygenerować AWR.
źródło
Możesz sprawdzić szczegóły długo działających zapytań, takich jak% ukończonych i pozostały czas, używając poniższego zapytania:
Pełną listę kroków rozwiązywania problemów można znaleźć tutaj: Rozwiązywanie problemów z długimi sesjami
źródło
źródło
Możesz użyć widoku v $ sql_monitor, aby znaleźć zapytania działające dłużej niż 5 sekund. Może to być dostępne tylko w wersjach Enterprise Oracle. Na przykład to zapytanie zidentyfikuje wolno działające zapytania z mojej usługi TEST_APP:
Zwróć uwagę, że czas elapsed_time jest wyrażony w mikrosekundach, więc / 1000000, aby uzyskać coś bardziej czytelnego
źródło