Domanda

Sto cercando di migliorare le prestazioni di una stored procedure. Quando eseguo la SP, termina quasi istantaneamente, come se qualcosa fosse nella cache. Mi è stato detto di utilizzare le seguenti due righe di SQL prima di eseguire il SP in SSMS:

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Quando si esegue il SP con le due righe di codice sopra finiture SP in circa 8 secondi. Tuttavia, è davvero questo mi dà il tempo reale di esecuzione (come in se corro questo da un'applicazione)? Come faccio a sapere?

È stato utile?

Soluzione

Questi comandi fare due cose:

  • Svuota cache della pagina, che memorizza i dati pagine che sono già stati recuperati dal disco (normalmente il più grande fattore nel tempo in una query è l'accesso al disco)
  • Svuota cache piano di query, il che significa che le esigenze del server per creare un nuovo piano di query. Questo non è normalmente significativo tranne che per volumi molto elevati di transazioni.

Si sono fondamentalmente ottenendo un tempo che è equivalente allo scenario "worst case" - appena riavviato il server e niente è in memoria. le esecuzioni successive non devono pagare il costo per estrarre i dati dal disco dal momento che tali pagine sono già caricati in memoria.

Questo è simile a una situazione del mondo reale -. Il vostro primo utente ad eseguire una determinata query dovrà probabilmente aspettare più a lungo rispetto a esecuzioni successive, supponendo che si sta verificando gli stessi dati

Un buon metodo che mi piace usare è in esecuzione più volte e prendere una media. Ciò è particolarmente utile in un ambiente condiviso in quanto non si ha il pieno controllo su risorse condivise come tempdb.

È inoltre possibile utilizzare questi comandi per ottenere ulteriori informazioni su ciò che sta realmente accadendo dietro le quinte:

SET STATISTICS IO ON
SET STATISTICS TIME ON

Questi vi darà Informazioni dettagliate circa pagina si legge dal disco (per oggetto), pagina logica si legge, il tempo trascorso compilazione di un piano, e il tempo trascorso esecuzione di una query.

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