Comment libérer de la mémoire SQL Server?

9

J'ai une installation de sandbox SQL Server sur mon ordinateur local. J'ai défini la mémoire que l'instance SQL Server peut utiliser à 1 000 Mo. Lors de l'exécution d'une opération intensive, l'utilisation de la mémoire augmente jusqu'à 1 000 Mo. Une fois l'opération terminée, SQL Server conserve toujours la mémoire. Comment libérer cette réservation mémoire?

jrara
la source
2
Quels sont vos paramètresmin server memory et ? Une fois que SQL Server réserve le minimum que vous spécifiez, il ne le libérera jamais sauf si vous modifiez le paramètre ou renvoyez l'instance. Comme James l'a noté, s'il réserve plus que le minimum que vous spécifiez, il devrait en théorie le libérer lorsqu'il n'en a pas besoin et qu'il y a une pression mémoire sur la machine. max server memory
Nick Chammas
@Nick: mémoire minimale du serveur: 0 (Mo); mémoire maximale du serveur: 600 (Mo).
jrara

Réponses:

13

Arrêtez / démarrez le service, rien d'autre ne libérera la mémoire sur le système d'exploitation.

Évidemment, ce n'est pas quelque chose que vous voudriez faire avec un serveur opérationnel, mais parfaitement raisonnable pour un sandbox local. Avec 3 instances différentes sur mon ordinateur portable, c'est le seul moyen viable.

Modifier le commentaire de @ Nick suivant.

Comme James l'a noté, s'il réserve plus que le minimum que vous spécifiez, il devrait en théorie le libérer lorsqu'il n'en a pas besoin et qu'il y a une pression mémoire sur la machine.

Quelle est votre définition de "n'en a pas besoin"? Une fois que le pool de tampons a été rempli, il ne supprimera pas les pages tant qu'elles ne seront pas défavorisées par d'autres pages introduites. Si vous souhaitez récupérer la mémoire immédiatement, comme c'est le cas pour @jrara, vous devez arrêter /début.

Mark Storey-Smith
la source
2
Par Microsoft : "Sous Windows Server 2003, SQL Server utilise l'API de notification de mémoire QueryMemoryResourceNotificationpour déterminer quand le pool de mémoire tampon peut allouer de la mémoire et libérer de la mémoire." Donc, si vous êtes juste inquiet de mourir de faim d'autres applications qui pourraient avoir besoin de plus de mémoire, SQL Server libérera en théorie la mémoire dont il n'a pas besoin lorsque Windows le lui dit. La seule raison pour laquelle vous devez forcer une version en redémarrant l'instance est si ce mécanisme ne fonctionne pas comme prévu ou si vos paramètres de mémoire min / max sont incorrects.
Nick Chammas
Un autre article msdn utile pour clarifier ce msdn.microsoft.com/en-us/library/ms178145.aspx . Tant que SQL Server a atteint son paramètre de mémoire minimale du serveur, il libère de la mémoire en réponse aux notifications de mémoire insuffisante du système d'exploitation. D'après mon expérience, cela doit être assez extrême pour que cela se produise.
georgeb
Précisément @georgeb_dba, il ne l'abandonnera pas facilement. Ergo, arrêtez / démarrez et récupérez immédiatement la mémoire limitée de votre ordinateur portable.
Mark Storey-Smith,
4
DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE 

va libérer la piscine.

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

Remarques

L'exécution de DBCC FREESYSTEMCACHE efface le cache du plan pour l'instance de SQL Server. L'effacement du cache du plan entraîne une recompilation de tous les plans d'exécution ultérieurs et peut entraîner une baisse soudaine et temporaire des performances des requêtes. Pour chaque cache caché dans le cache du plan, le journal des erreurs SQL Server contiendra le message d'information suivant: «SQL Server a rencontré% d occurrence (s) de vidage du cache pour le cache«% s »(partie du cache du plan) en raison de Opérations "DBCC FREEPROCCACHE" ou "DBCC FREESYSTEMCACHE". " Ce message est enregistré toutes les cinq minutes tant que le cache est vidé dans cet intervalle de temps.

Daniel Decasse
la source
1
à peu près sûr que cela ne réduira pas réellement la quantité de mémoire que SQL a réservée au niveau du système d'exploitation
Greg
3

Il abandonnera automatiquement la mémoire qu'il n'utilise pas lorsque d'autres applications tentent de le valider.

JamesRyan
la source