sql >> Databasteknik >  >> RDS >> Oracle

Topp 5 tidskrävande SQL-frågor i Oracle

Jag tyckte att den här SQL-satsen var ett användbart ställe att börja (tyvärr att jag inte kan tillskriva det den ursprungliga författaren, jag hittade den någonstans på 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
/

Detta hittar de översta SQL-satserna som för närvarande lagras i SQL-cachen sorterade efter förfluten tid. Påståenden kommer att försvinna från cachen med tiden, så det kanske inte är bra att försöka diagnostisera gårdagens batchjobb när du rullar till jobbet vid middagstid.

Du kan också prova att beställa efter disk_reads och körningar. Exekveringar är användbara eftersom vissa dåliga applikationer skickar samma SQL-sats alldeles för många gånger. Denna SQL förutsätter att du använder bindningsvariabler korrekt.

Sedan kan du ta sql_id och child_number av ett uttalande och mata in dem i denna baby:-

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

Detta visar den faktiska planen från SQL-cachen och hela texten i SQL.



  1. Hur man hittar datumformatet som används i den aktuella sessionen i SQL Server (T-SQL)

  2. Varning:mysql_result() förväntar sig att parameter 1 är resurs, boolesk given

  3. Hur man eliminerar icke-arbetstid i Oracle

  4. Returnera partitionsnumret för varje rad när du frågar efter en partitionerad tabell i SQL Server (T-SQL)