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?
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
@adrian Piano di esecuzione è solo una guida. il sottoalbero stimato costa A vs B è spesso sbagliato quando effettivamente eseguito – RichardTheKiwi
@Richard: è vero anche quando si utilizza il piano di esecuzione effettivo? – adrianbanks