it-swarm.it

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

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 UN'APPLICAZIONE ESTERNA. 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 significano qualche altro tipo di costo, ma non riesco a trovare un riferimento altrove.

Qualcuno può aiutare? Sono completamente confuso.

34

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 un presentazione SQLBits che in origine si riferiva al numero di secondi impiegato per l'esecuzione su un determinato computer di un dipendente Microsoft ( "Nick's Machine" ) in SQL Server 7 giorni

enter image description here

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

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

Per determinare il costo stimato per un'intera query in SSMS, selezionare l'iteratore principale (ad esempio, l'iteratore SELECT) 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.

43
Martin Smith