Uważam, że to polecenie SQL jest przydatnym miejscem do rozpoczęcia (przepraszam, nie mogę przypisać tego oryginalnemu autorowi; znalazłem je gdzieś w Internecie):
SELECT * FROM
(SELECT
sql_fulltext,
sql_id,
elapsed_time,
child_number,
disk_reads,
executions,
first_load_time,
last_load_time
FROM v$sql
ORDER BY elapsed_time DESC)
WHERE ROWNUM < 10
/
Znajduje to najlepsze instrukcje SQL, które są obecnie przechowywane w pamięci podręcznej SQL, uporządkowane według czasu, który upłynął. Wyciągi z czasem znikną z pamięci podręcznej, więc próba zdiagnozowania zadania wsadowego z zeszłej nocy może nie być dobra, gdy wejdziesz do pracy w południe.
Możesz także spróbować uporządkować według disk_reads i egzekucji. Wykonania są przydatne, ponieważ niektóre słabe aplikacje wysyłają tę samą instrukcję SQL zbyt wiele razy. Ten kod SQL zakłada, że poprawnie używasz zmiennych bind.
Następnie możesz wziąć sql_id
i child_number
oświadczenia i nakarm je temu dziecku:-
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));
Pokazuje rzeczywisty plan z pamięci podręcznej SQL i pełny tekst SQL.