Come faccio a leggere Costo query ed è sempre una percentuale?


34

Attualmente sto studiando per SQL 70-433 (l'esame di certificazione Microsoft) e mi sto confondendo molto sulla metrica delle prestazioni "costo query".

Secondo qualsiasi documentazione che ho trovato tramite Google, il costo della query è un valore percentuale e rappresenta la percentuale dell'intero batch occupato da una parte di esso. Questo mi è già sembrato un po 'strano, poiché sono interessato al merito assoluto di una particolare query, piuttosto che al suo merito rispetto ad altre query che si presentano accanto ad essa.

Ma poi ho pensato, beh, forse quello che ci si aspetta che tu faccia è mettere due query alternative fianco a fianco, eseguirle come "un batch", e quindi quello che ha un costo inferiore al 50% è il vincitore.

Ma la discussione sul costo delle query nel capitolo 6, lezione uno del kit di formazione SQL 70-433 di Microsoft non sembra avere alcuna relazione con questo.

Ecco un esempio: mostrano una query che contiene due sottoquery correlate e quindi migliorano sostituendo le sottoquery con una OUTER APPLY. Il risultato: "Questa query ha un costo di circa 76, mentre il costo della prima query era il doppio di quello, circa 151." Quindi migliorano ulteriormente la query e riducono i costi da 76 a 3,6. Non implicano che queste cifre siano percentuali, mentre implicano che sono cifre assolute che si riferiscono alla query come oggetto autonomo, senza riferimento ad altre query. E comunque, come potrebbe la prima query avere un costo del 151%?

Più avanti nel capitolo, mostrano uno screenshot di un piano di esecuzione che ha tre parti. Il primo dice "Costo: 0%", il secondo dice "Costo: 1%" e l'ultimo dice "Costo: 99%" ma il testo (del libro stesso) sotto lo screenshot "Il costo di questa query è 0,56" . Immagino che significhino qualche altro tipo di costo, ma non riesco a trovare riferimenti altrove.

Qualcuno può aiutare? Sono completamente confuso.


PS Presumendo che si riferiscano a qualcosa di diverso dalle percentuali mostrate nei piani di esecuzione ... come posso ottenere SSMS per mostrarmi le cifre che stanno citando? Ho bisogno di qualcosa di simile a SET STATISTICS TIME ON, ma con qualche altro comando che mi mostrerà un "costo" nella scheda Messaggi?

Risposte:


43

Il costo della query è riportato nei piani di esecuzione come "costo della sottostruttura stimato". Questa è una cifra assoluta come 1.5. Conor Cunningham ha menzionato in una presentazione di SQLBits che originariamente si riferiva al numero di secondi necessari per l'esecuzione su una determinata macchina dei dipendenti Microsoft ( "Nick's Machine" ) in SQL Server 7 giorni

inserisci qui la descrizione dell'immagine

ma ora dovrebbe essere interpretato come una misura senza unità del costo complessivo.

Il piano di esecuzione è un albero. A ogni iteratore nella struttura vengono indicati un costo CPU stimato e un costo IO stimato e questi vengono sommati per ottenere il costo complessivo (i relativi pesi possono essere regolati con un paio di comandi DBCC non documentati ). Il costo della sottostruttura stimato include il costo per l'iteratore stesso e tutti i suoi discendenti. Per vedere un esempio delle formule di determinazione dei costi utilizzate, puoi consultare questo articolo .

Per determinare il costo stimato per un'intera query in SSMS, selezionare l'iteratore principale (ad es SELECT iteratore) a sinistra del piano grafico e osservare questa metrica nella finestra delle proprietà SSMS.

Quando si eseguono più query (nello stesso batch o meno) la percentuale viene calcolata sommando tutti questi valori e calcolando la percentuale come ci si aspetterebbe.

È necessario essere consapevoli del fatto che anche nei piani di esecuzione effettivi questa cifra di costo si basa su stime e l'utilizzo di questo per confrontare i meriti relativi di due diverse query può essere dolorosamente sbagliato nei casi in cui le stime non sono accurate.


Grazie, è davvero utile. E per niente ovvio! Mi chiedo perché quella cifra non sia contrassegnata più chiaramente?

4
Mi sono sempre chiesto l'unità di misura, felice di scoprirlo finalmente. Ho spiegato alle persone (comicamente) che si tratta di "dollari SQL". Se il costo di una query è 1,0, è come pagare 1 dollaro per una tazza di caffè. Non è un cattivo prezzo. Pagheresti $ 300 per una tazza? Non c'è modo!
datagod
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.