2009-08-21 15 views
7

Sono nuovo di Oracle db. Ho 2 query che restituiscono lo stesso set di risultati. Voglio misurare le prestazioni di ciascuno di essi e scegliere quello migliore. Come posso farlo utilizzando lo sviluppatore Oracle SQL? Ricordo di aver letto che alcuni strumenti forniscono statistiche. Qualche suggerimento su come leggere queste statistiche?Come misurare le prestazioni della query in Oracle

Aggiornamento: come suggerito da Rob Van, ho utilizzato l'utilità tkprof per trovare le prestazioni delle mie query. Alcuni parametri che potrei capire (conteggio, righe, tempo trascorso, tempo di esecuzione), ma la maggior parte non ho potuto. Qualcuno può aiutarmi con il significato di quei parametri? Di seguito sono i risultati.

Query 1: 
call  count  cpu elapsed  disk  query current  rows 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
Parse  1  0.01  0.01   0   0   0   0 
Execute  1  0.00  0.00   0   0   0   0 
Fetch  49  0.26  0.32   45  494   0  23959 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
total  51  0.28  0.33   45  494   0  23959 

Query2: 
call  count  cpu elapsed  disk  query current  rows 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
Parse  1  0.00  0.00   0   0   0   0 
Execute  1  0.00  0.00   0   0   0   0 
Fetch  33  0.25  0.24   0  904   0  15992 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
total  35  0.25  0.24   0  904   0  15992 

posso decidere quella domanda 2 è meglio di query 1. Qualsiasi aiuto su quale disco, query e params corrente media ??

+0

Lei ha detto che di query 1 e interrogazione 2 restituisce lo stesso set di risultati. Tuttavia, il file tkprof mostra che la query 1 restituisce 23959 righe e la query 2 restituisce 15992 righe. Non esattamente uguale ... –

+0

Okie la query è parte di una creazione di vista. Il numero delle righe restituite è diverso perché il modo in cui le query creano la vista sono differenti. La prima query utilizza i sindacati e la seconda query utilizza LOJ e poiché la prima query utilizza unio, alcuni record vengono duplicati, cosa che non accade nel caso della seconda query – Cshah

risposta

9

C'è un pulsante sopra l'editor SQL chiamato "Explain Plan". Questo strumento ti dirà quali sono i costi di ogni percorso e in che modo l'istruzione utilizzerà indici e partizioni. Nota, potresti ricevere un errore, il tuo DBA dovrà attivare una funzione per il tuo account utente, credo che sia "traccia", ma potrebbe essere sbagliato su quel punto. Leggere l'output di istruzioni execute può essere difficile all'inizio, ma è un buon strumento per aiutare a scrivere un buon SQL.

+0

Thx.Yep ho visto i risultati nella scheda Spiegare. Una colonna denominata costo viene visualizzata con i numeri. Dovrei scavare in oracle docs per interpretare cosa significano questi numeri – Cshah

+2

Consiglio vivamente di scavare in quei documenti. Fai qualche ricerca su ottimizzazione e ottimizzazione Oracle. (Burleson ha alcune cose buone - google "Oracle Burleson" per vedere un sito di consulenza che include suggerimenti.) E controlla questo per una panoramica di ciò che vedi con "spiega piano". http://www.akadia.com/services/ora_interpreting_explain_plan.html Come notato in un altro commento, il solo controllo della velocità non significa molto. L'ambiente può cambiare le cose: veloce in un ambiente può essere lento in un altro. – user158017

+0

Ma imparare le cose può richiedere tempo. Fai del tuo meglio, controlla la velocità per ora, quindi assorbi il più possibile e sintonizza mentre procedi. – user158017

1

Risposta di base: eseguire ogni query un paio di volte e vedere quale è più veloce. La parte migliore: puoi farlo senza conoscere le prestazioni di Oracle. L'unica cosa che devi sapere è che non ti puoi fidare al primo tentativo perché la maggior parte delle volte leggerà i dati dal disco mentre il secondo tentativo userà i dati memorizzati nella cache dalla RAM. Questo è il motivo per cui provi ogni query un paio di volte.

+1

Cosa succede se la query "più veloce" utilizza molto spazio temporaneo? Una volta spostato in produzione, con più utenti che utilizzavano lo spazio temporaneo, la query "più veloce" potrebbe rallentare perché potrebbe avviare il paging. Il problema con la determinazione della velocità della query è che la risposta è sempre "dipende". è meglio usare spiegare il piano, prendendo nota dello spazio temporaneo utilizzato, e quindi valutare in termini di ambiente server. Anche se è difficile fare bene, sto ancora imparando. – user158017

+1

Spiegare il piano è buono ma prima devi essere in grado di leggerlo. Se devi fare una scelta oggi tra due domande e non hai visto spiegare gli strumenti del piano in tutta la tua vita, quelli NESTED LOOP/HASH JOIN/INDEX RANGE SCAN/INDEX FFS non ti aiuteranno veramente. Se hai settimane a disposizione, allora assicurati, vai e impara prima l'ottimizzazione delle prestazioni di Oracle e scrivi le query più tardi. – jva

3

Su OTN, Randolf Geist e io abbiamo scritto due post su come misurare le prestazioni. Se fai come indicato in quei thread, avrai raccolto le informazioni per poter scegliere il migliore.

Se si desidera la versione completa, visitare Randolf's.

Se si desidera una versione breve, visitare mine:

Entrambe le discussioni spiegano come utilizzare spiegare piano e tracciamento per vedere dove il tempo viene speso. Poi spetta a te decidere cosa si qualifica esattamente come "migliore". Questo può essere il tempo più breve trascorso, la quantità minima di risorse utilizzate o il minor numero di latch o forse qualcos'altro.

Spero che questo aiuti.

Cordiali saluti, Rob.

1

Ho paura che SPIEGARE IL PIANO è l'unico modo. Inizia supponendo che un costo inferiore (se guardi il piano spiega che ci dovrebbe essere una colonna chiamata COST) è meglio, ma devi leggerlo al riguardo per imparare sempre di più. Forse hai un DBA lì con cui puoi chattare? Senza avere i tuoi dati e le domande è difficile consigliare ulteriormente

Per qualsiasi cosa abbia a che fare con lo sviluppo di Oracle, un buon punto di partenza è qualsiasi cosa di Tom Kyte (Google) o cercare attraverso the Ask Tom website. Se vuoi davvero essere coinvolto

L'esecuzione della query solo poche volte è una pessima idea, equivale ad accettare semplicemente che il costo del piano di spiegazione ti indica la query migliore. È davvero necessario prendere in considerazione le risorse utilizzate dalla query e, quindi, il modo in cui potrebbe influire sul sistema di produzione dell'utente.

A seconda della frequenza con cui viene richiamata la query, influisce su quanto è necessario tenere traccia delle prestazioni di una query (scusate i puristi, ma lo fa). Se la query viene eseguita solo una volta alla settimana e impiega un minuto per eseguire senza influire su nient'altro, allora è necessario ottimizzare tale query? È più semplice per la manutenzione utilizzare una query più facile da seguire logicamente?

Se la query viene chiamato più volte al secondo, allora avete bisogno di capire completamente il piano di spiegare, e hanno una maggiore comprensione su come si può ottimizzare la query al meglio le prestazioni

Problemi correlati