Ich fand, dass diese SQL-Anweisung ein nützlicher Ausgangspunkt ist (sorry, ich kann sie nicht dem ursprünglichen Autor zuordnen; ich habe sie irgendwo im Internet gefunden):
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
/
Dadurch werden die wichtigsten SQL-Anweisungen gefunden, die derzeit im SQL-Cache gespeichert sind, sortiert nach verstrichener Zeit. Anweisungen verschwinden im Laufe der Zeit aus dem Cache, daher ist es möglicherweise sinnlos, den Batch-Job von gestern Abend zu diagnostizieren, wenn Sie mittags zur Arbeit kommen.
Sie können auch versuchen, nach disk_reads und Ausführungen zu ordnen. Ausführungen sind nützlich, da einige schlechte Anwendungen die gleiche SQL-Anweisung viel zu oft senden. Diese SQL setzt voraus, dass Sie Bind-Variablen korrekt verwenden.
Dann können Sie die sql_id
nehmen und child_number
einer Aussage und füttere sie in dieses Baby:-
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));
Dies zeigt den aktuellen Plan aus dem SQL-Cache und den vollständigen Text der SQL.