Zjistil jsem, že tento příkaz SQL je užitečné místo, kde začít (omlouvám se, že to nemohu připsat původnímu autorovi; našel jsem to někde na internetu):
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
/
Toto vyhledá nejvyšší příkazy SQL, které jsou aktuálně uloženy v mezipaměti SQL, seřazené podle uplynulého času. Výpisy časem zmizí z mezipaměti, takže nemusí být dobré zkoušet diagnostikovat včerejší noční dávkovou úlohu, když v poledne dorazíte do práce.
Můžete také zkusit řazení podle disk_reads a provádění. Spouštění je užitečné, protože některé špatné aplikace odesílají stejný příkaz SQL příliš mnohokrát. Tento SQL předpokládá, že správně používáte proměnné vazby.
Pak si můžete vzít sql_id
a child_number
prohlášení a nakrmit je do tohoto dítěte:-
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));
Toto ukazuje skutečný plán z mezipaměti SQL a úplný text SQL.