2009-12-06 6 views
16

Solo una domanda generale:Come consentire a SQL Server di non utilizzare la cache nelle query?

Esiste una query/comando È possibile passare a SQL Server per non utilizzare la cache quando si esegue una query particolare?

Sto cercando una query/comando che posso impostare piuttosto che un'impostazione di configurazione. Non c'è bisogno di fare questo?

+0

Non riesco a pensare a una ragione per cui tu voglia farlo e non l'ho mai visto. Cosa stai cercando di sistemare? – jvilalta

+5

Potrebbe essere utile per misurare il tempo medio impiegato per eseguire una query quando la cache non può essere utilizzata. –

+8

@Jvilata -> lo si farebbe quando si desidera correggere le prestazioni non elaborate per una stored procedure o una query. Il tempo più lento in cui una query/sp viene eseguita, è quando viene compilato per la prima volta perché non è memorizzato nella cache ... e ciò esclude qualsiasi cosa la query supponga di fare/tornare indietro. Quindi, se è possibile correggere le prestazioni di una query/sp quando non è stato memorizzato nella cache, allora si conosce lo scenario peggiore per quella query (più o meno). –

risposta

19
DBCC FREEPROCCACHE 

rimuoverà tutti i piani di procedure di esecuzione nella cache. Ciò causerebbe la ricompilazione di tutte le chiamate di procedura successive.

L'aggiunta di "WITH RECOMPILE" a una definizione di procedura causerebbe la ricompilazione della procedura ogni volta che veniva richiamata.

Non credo che (in SQL 2005 o versioni precedenti) ci sia un modo per cancellare la cache di procedura di un singolo piano di esecuzione delle procedure, e dubito che si possa fare anche nel 2008.

+2

È possibile rimuovere un singolo piano utilizzando il seguente SQL. DBCC FREEPROCCACHE [({plan_handle | sql_handle | pool_name})] [WITH NO_INFOMSGS] – Afr

1

uso

WITH RECOMPILE 
16

Se si vuole forzare una query non utilizzare la cache dei dati, l'approccio migliore è quello di cancellare la cache prima di eseguire la query:

CHECKPOINT 
DBCC DROPCLEANBUFFERS 

Nota che forzare una ricompilazione non avrà alcun effetto sulla uso della query della cache di dati.

Un motivo per cui non è possibile contrassegnare una singola query per evitare la cache è che l'utilizzo della cache è parte integrante dell'esecuzione della query. Se i dati sono già nella cache, cosa farebbe SQL Server con i dati se fosse stato letto una seconda volta? Per non parlare dei problemi di sincronizzazione, ecc.

Problemi correlati