Achei essa instrução SQL um lugar útil para começar (desculpe, não posso atribuir isso ao autor original; encontrei em algum lugar na internet):
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
/
Isso localiza as principais instruções SQL que estão atualmente armazenadas no cache SQL ordenadas pelo tempo decorrido. As instruções desaparecerão do cache com o tempo, portanto, pode não ser bom tentar diagnosticar o trabalho em lote da noite anterior quando você chegar ao trabalho ao meio-dia.
Você também pode tentar ordenar por disk_reads e execuções. Execuções é útil porque alguns aplicativos ruins enviam a mesma instrução SQL muitas vezes. Esse SQL pressupõe que você use variáveis de ligação corretamente.
Então, você pode pegar o
sql_id
e child_number
de uma declaração e alimentá-los para este bebê:- SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));
Isso mostra o plano real do cache SQL e o texto completo do SQL.