Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Top 5 der zeitaufwändigsten SQL-Abfragen in Oracle

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.