Oracle
 sql >> Database >  >> RDS >> Oracle

Le 5 query SQL che richiedono molto tempo in Oracle

Ho trovato questa istruzione SQL un utile punto di partenza (scusate, non posso attribuirla all'autore originale; l'ho trovata da qualche parte su 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
/

In questo modo vengono individuate le istruzioni SQL principali attualmente archiviate nella cache SQL ordinate in base al tempo trascorso. Le istruzioni scompariranno dalla cache nel tempo, quindi potrebbe non essere utile cercare di diagnosticare il lavoro batch di ieri sera quando inizi a lavorare a mezzogiorno.

Puoi anche provare a ordinare per disk_reads ed esecuzioni. Le esecuzioni sono utili perché alcune applicazioni scadenti inviano la stessa istruzione SQL troppe volte. Questo SQL presuppone che tu usi correttamente le variabili di binding.

Quindi, puoi prendere sql_id e child_number di una dichiarazione e nutrirli in questo bambino:-

SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));

Questo mostra il piano effettivo dalla cache SQL e il testo completo dell'SQL.