Come posso cancellare una tabella dalla cache di SQL Server?


10

Ho alcune tabelle nel mio database che non dovrebbero essere memorizzate nella cache.

Come faccio a dire a SQL Server di non memorizzare nella cache le pagine di una tabella o come svuotare una singola tabella dalla cache?

Svuotare tutta la cache non è un'opzione.

Sto usando SQL Server 2008 e SQL Server 2008 R2.


4
Su quale base hai deciso di non memorizzare nella cache le tabelle?

3
Se i tuoi tavoli vengono memorizzati nella cache, vengono interrogati. Se si accede raramente, il gestore della memoria di SQL Server li eliminerà preferendo altri oggetti al momento richiesto. Qual è il tuo obiettivo qui?
John Sansom,

4
@John - Non ho idea di quale sia l'obiettivo dell'OP, ma ci sono momenti in cui questo sarebbe utile. ad es. eseguire una scansione una tantum su una tabella di grandi dimensioni senza svuotare il pool di buffer.

3
Alcuni dei motivi: tabella a bassa priorità, iis / rs sulla stessa macchina del server sql, consumo di energia, ecc. Il più importante è che alcune tabelle sono tabelle a bassa priorità per quanto riguarda le prestazioni dell'applicazione e possono essere lette in modo sicuro dal disco ogni volta che si accede. Tenendo queste tabelle fuori dal pool di buffer, l'analisi della memoria diventa leggermente più semplice.
Catalin Adler,

1
@ user973156: Il tuo codice e il tuo design sono così buoni che ora puoi solo indovinare SQL Server per migliorare le cose?
gbn,

Risposte:


12

Non c'è modo di farlo.

DBCC DROPCLEANBUFFERSnon accetta parametri per uno specifico database o oggetto. Internamente SQL Server può farlo a livello di database, tuttavia, come quando un database viene AUTO_CLOSErimosso, tutte le pagine corrispondenti vengono rimosse dalla cache del buffer.

Anche internamente SQL Server può contrassegnare determinate pagine in modo tale che saranno le prime a essere eliminate dall'autore pigro. Questo è usato dai DMV sys.dm_db_index_physical_statsper evitare di svuotare il pool di buffer come indicato in questo articolo, ma questa funzionalità non ci è esposta in alcun modo (anche se potrebbe essere utile poter specificare lo stesso se si esegue una scansione una tantum di una grande tabella per esempio).


7

Non è possibile specificare che tabelle specifiche non debbano essere memorizzate nella cache. Cosa ti fa pensare di non volere le tabelle nella cache?

SQL Server esegue TUTTE le sue normali operazioni nel pool di buffer, quindi se si fosse in grado di dire a SQL Server di non caricare una tabella nella cache, tale tabella non sarebbe accessibile per le normali operazioni DML.

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.