Jeg fandt denne SQL-sætning et nyttigt sted at starte (beklager, jeg kan ikke tilskrive den originale forfatter, jeg fandt den et sted på internettet):
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
/
Dette finder de øverste SQL-sætninger, der i øjeblikket er gemt i SQL-cachen, sorteret efter forløbet tid. Udsagn vil forsvinde fra cachen med tiden, så det er måske ikke godt at prøve at diagnosticere gårsdagens batchjob, når du går på arbejde ved middagstid.
Du kan også prøve at bestille efter disk_reads og executions. Eksekveringer er nyttige, fordi nogle dårlige applikationer sender den samme SQL-sætning alt for mange gange. Denne SQL antager, at du bruger bindevariabler korrekt.
Derefter kan du tage sql_id
og child_number
af et udsagn og foder dem ind i denne baby:-
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));
Dette viser den faktiske plan fra SQL-cachen og den fulde tekst af SQL.