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

Top 5 tidskrævende SQL-forespørgsler i Oracle

Jeg fandt denne SQL-sætning et nyttigt sted at starte (beklager, jeg kan ikke tilskrive den originale forfatter, jeg fandt den et sted på internettet):

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
/

Dette finder de øverste SQL-sætninger, der i øjeblikket er gemt i SQL-cachen, sorteret efter forløbet tid. Udsagn vil forsvinde fra cachen med tiden, så det er måske ikke godt at prøve at diagnosticere gårsdagens batchjob, når du går på arbejde ved middagstid.

Du kan også prøve at bestille efter disk_reads og executions. Eksekveringer er nyttige, fordi nogle dårlige applikationer sender den samme SQL-sætning alt for mange gange. Denne SQL antager, at du bruger bindevariabler korrekt.

Derefter kan du tage sql_id og child_number af et udsagn og foder dem ind i denne baby:-

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

Dette viser den faktiske plan fra SQL-cachen og den fulde tekst af SQL.



  1. Hvordan finder man ud af, at brugeren er til stede i Sqlite-databasen ved hjælp af Android?

  2. Fortsætter en transaktion efter fejl ved primærnøgleovertrædelse

  3. Får du en ekstern tabels placering og filnavn?

  4. Ny funktion til BYOC – Pause og genoptagelse af klynger