2011-03-21 16 views
5

Ho un DB SQL 2005 in esecuzione in un ambiente virtuale.Qual è il modo migliore per confrontare 2 varianti di una query SQL per le prestazioni?

Per semplificare le cose, supponiamo di avere due query SQL SELECT. Entrambi fanno esattamente la stessa cosa. Ma sto cercando di analizzarli a fini di prestazioni.

Generalmente, accendere un DB locale, caricare alcuni dati e utilizzare la temporizzazione per confrontare una variante con altre varianti.

Ma in questo caso, poiché il DB è grande ed è un testbox, il client lo ha posizionato su un host che sta servendo anche altre macchine virtuali.

Il DB è troppo grande per essere rimosso localmente, quindi è fuori (almeno per ora).

Ma il mio problema principale è che quando eseguo query sul server, i tempi sono dappertutto. Posso eseguire + esatta + stessa query 4 volte e ottenere tempi di 7 secondi, 8 minuti, 3: 45 minuti e 15 minuti.

Il mio primo pensiero era usare SET STATISTICS IO ON.

Tuttavia, ciò produce sostanzialmente statistiche di lettura e scrittura sulle tabelle che sono query, che, a seconda delle variazioni nelle query (tabelle temporanee, visualizzazioni, conversioni, ecc.) Non possono essere confrontate in modo accurato, ad eccezione di aggregato.

Quindi ho l'ora di SET STATISTICS TIME ON e uso solo il tempo della CPU, ma questo sembra di scartare tutto l'IO, il che non rende una buona base di riferimento.

La mia domanda è c'è qualche altra tecnica statistica o analisi delle prestazioni che potrebbe essere utile in una situazione come questa?

+0

In un confronto * molto * semplice, è possibile eseguirli entrambi nello stesso batch con il piano di esecuzione dello spettacolo e vedere quale recupera la maggior parte della percentuale totale. – adrianbanks

+0

@adrian Piano di esecuzione è solo una guida. il sottoalbero stimato costa A vs B è spesso sbagliato quando effettivamente eseguito – RichardTheKiwi

+0

@Richard: è vero anche quando si utilizza il piano di esecuzione effettivo? – adrianbanks

risposta

1

Le informazioni di STATISTICHE IO saranno comunque utili. È possibile visualizzare numeri significativamente diversi di letture, scritture e scansioni che renderanno evidente quale query è migliore.

È inoltre possibile visualizzare le informazioni del piano di esecuzione per ogni query. È possibile selezionare Query -> Visualizza piano di esecuzione stimato per visualizzare una presentazione grafica della stima di SQL Server per eseguire la query. Puoi anche utilizzare la query -> Includi piano di esecuzione reale per mostrare il piano effettivo utilizzato.

E, è anche possibile utilizzare SET SHOWPLAN_TEXT, SET SHOWPLAN_ALL o SET SHOWPLAN_XML per includere il piano di esecuzione per visualizzare una visualizzazione testuale del piano.

Durante la visualizzazione dei risultati del piano di esecuzione, è possibile esaminare il valore di costo stimato e confrontare i valori per ogni query. Il costo stimato è un valore relativo che può essere utilizzato per confrontare il costo di ciascuna opzione.

+0

Ho lavorato con i piani grafici ma li ho confrontati, specialmente quando le query che sto confrontando sono significativamente diverse, sembra come confrontare le mele con le arance, inoltre è difficile confrontarle quando questi piani grafici possono diventare piuttosto grandi. Guardando ShowPlan_Text, potrebbe funzionare un po 'meglio, però. Non avevo giocato con quello prima. Vedrò anche più il valore del costo stimato. Grazie! – DarinH

+0

Darò a Bob la risposta accettata, ma spero ancora che ci sia un approccio più diretto. Alla fine della giornata, però, sto spingendo per ottenere un'unità TB o da 2 TB installata nella mia macchina in modo da poter eseguire il test localmente e farcela. – DarinH

Problemi correlati