Come liberare memoria di SQL Server?


9

Ho un'installazione sandbox di SQL Server sul mio computer locale. Ho impostato la memoria che l'istanza di SQL Server può utilizzare su 1000 mb. Quando si esegue un'operazione intensiva, l'utilizzo della memoria aumenta fino a 1000 mb. Al termine dell'operazione, SQL Server conserva ancora la memoria. Come liberare questa prenotazione di memoria?


2
Quali sono le tue min server memorye max server memory le impostazioni ? Una volta che SQL Server riserva il minimo specificato, non lo rilascerà mai a meno che non modifichi l'impostazione o rimbalzi l'istanza. Come notato da James, se si riserva più del minimo specificato, in teoria dovrebbe rilasciarlo quando non è necessario e c'è una pressione di memoria sulla macchina.
Nick Chammas,

@Nick: memoria minima del server: 0 (MB); memoria massima del server: 600 (MB).
jrara,

Risposte:


13

Arresta / avvia il servizio, nient'altro rilascerà la memoria sul sistema operativo.

Ovviamente non è qualcosa che vorresti mai fare con un server operativo ma perfettamente ragionevole per un sandbox locale. Con 3 diverse istanze sul mio laptop, è l'unico modo possibile.

Modifica seguendo il commento di Nick.

Come notato da James, se si riserva più del minimo specificato, in teoria dovrebbe rilasciarlo quando non è necessario e c'è una pressione di memoria sulla macchina.

Qual è la tua definizione di "non ne ha bisogno"? Una volta che il pool di buffer è stato riempito, non eliminerà le pagine fino a quando non saranno sfavorite da altre pagine che vengono portate. Se si desidera ripristinare immediatamente la memoria, come nel caso di @jrara, è necessario interrompere /inizio.


2
Per Microsoft : "In Windows Server 2003, SQL Server utilizza l'API di notifica della memoria QueryMemoryResourceNotificationper determinare quando il pool di buffer può allocare memoria e rilasciare memoria". Quindi, se sei solo preoccupato di morire di fame altre app che potrebbero aver bisogno di più memoria, in teoria SQL Server rilascerà la memoria che non è necessaria quando Windows glielo dice. L'unico motivo per cui è necessario forzare un rilascio riavviando l'istanza è se questo meccanismo non funziona come previsto o se le impostazioni di memoria min / max non sono corrette.
Nick Chammas,

Un altro utile articolo msdn per chiarire questo msdn.microsoft.com/en-us/library/ms178145.aspx . Finché SQL Server ha raggiunto l'impostazione di memoria minima del server, rilascia memoria in risposta a notifiche di memoria insufficiente dal sistema operativo. Nella mia esperienza, tuttavia, deve essere abbastanza estremo.
georgeb,

Esattamente @georgeb_dba, non si arrenderà facilmente. Ergo, stop / start e recupera immediatamente la memoria limitata del tuo laptop.
Mark Storey-Smith,

4
DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE 

libererà la piscina.

https://msdn.microsoft.com/en-us/library/ms178529.aspx

Osservazioni

L'esecuzione di DBCC FREESYSTEMCACHE cancella la cache del piano per l'istanza di SQL Server. Svuotare la cache del piano provoca una ricompilazione di tutti i piani di esecuzione successivi e può causare una riduzione improvvisa e temporanea delle prestazioni della query. Per ogni cache cancellata nella cache del piano, il registro degli errori di SQL Server conterrà il seguente messaggio informativo: "SQL Server ha riscontrato% d occorrenze di svuotamento della cache per il cachestore '% s' (parte della cache del piano) a causa di "DBCC FREEPROCCACHE" o "DBCC FREESYSTEMCACHE". " Questo messaggio viene registrato ogni cinque minuti, purché la cache venga svuotata entro tale intervallo di tempo.


1
abbastanza sicuro che questo non ridurrà effettivamente la quantità di memoria che SQL ha riservato a livello di sistema operativo
Greg

3

Rinuncerà alla memoria che non sta usando automaticamente mentre altre app tentano di impegnarlo.

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.