Domanda

Una volta scritta a / proc / funzione memorizzata interrogazione, qual è il modo più informativo per ottenere rapidamente alcuni parametri di performance? Non si esegue la query e visualizzare il piano di esecuzione reale? In caso affermativo, quali sono le cose che cercate? Ovviamente le scansioni di tabella / indice sono i colpi di bit, ma che altro?

È stato utile?

Soluzione

Per una rapida valutazione, ottenere il piano di esecuzione di SQL Server Management Studio e al Piano Explorer .

  • Esaminare le operazioni più costoso per qualcosa di inaspettato. I tipi, tavoli da lavoro, inadeguato uniscono gli operatori (anello per esempio nidificato in cui ci si aspetta un'unione o hash).
  • Guarda le rowcounts in ogni fase del piano, sono essi ampiamente all'interno della gamma che si aspetta di vedere?
  • Guardate la stima vs righe effettive. Se sei effettivi sono vicino alle stime, è più probabile che si dispone di un buon piano. Se ci sono grandi variazioni, scoprire perché (mancanti e / o fuori statistiche aggiornate, per esempio).
  • valutare il potenziale di problemi di sniffing dei parametri. Cerca per le zone dove cardinalità può variare e di prova contro una serie di parametri di ingresso.

Un sacco di materiale di riferimento liberamente disponibili là fuori, di Grant Fitchley piani di esecuzione di SQL Server è un buon inizio. Ho anche trovato i post del blog Joe Chang e ebook su piano di esecuzione costa molto utile.

Altri suggerimenti

Per lo più, tutto ciò che faccio è solo eseguire la query e scoprire come viene eseguito con i dati del mondo reale. Se c'è un problema, poi prendo uno sguardo ai piani di esecuzione.

Per quanto riguarda i piani di esecuzione, Brad McGehee ha un interessante articolo sull'argomento.

In essa egli dice:

Se si vede uno dei seguenti in un piano di esecuzione, si dovrebbe considerare li segnali di pericolo e di indagare per il potenziale problemi di prestazioni. Ognuno di essi sono tutt'altro che ideali da un prestazioni prospettiva.

* Index or table scans: May indicate a need for better or additional indexes.

* Bookmark Lookups: Consider changing the current clustered index, consider using a covering index, limit the number of columns in the SELECT statement.

* Filter: Remove any functions in the WHERE clause, don’t include wiews[sic] in your Transact-SQL code, may need additional indexes.

* Sort: Does the data really need to be sorted? Can an index be used to avoid sorting? Can sorting be done at the client more efficiently? 

Non è sempre possibile evitare questi, ma più si può evitare loro, il più veloce di query prestazioni saranno.

SET STATISTICS IO ON

In generale, il "numero di letture logiche" dovrebbe essere il più basso possibile. Le poche pagine toccato per completare la query, il meglio il piano come sarà (in genere) essere più veloce, un minore impatto sulla CPU, RAM e disco IO.

Questo vi guiderà quando si cambiano gli indici o ri-factoring del SQL è in realtà aiutando. Guardando "tempo excecution millisecondo" varierà anche con lo stesso SQL e piano di query -. Letture logiche rimarrà costante per qualsiasi piano di query

Anche "letture fisiche" dovrebbe essere molto bassa (ed essere pari a zero e rimanere a zero per le esecuzioni successive). Se questa non lo fa allora guardare il tuo utilizzo della memoria SQL Server (pagina di vita, ecc).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top