Je sais que SQL aime la RAM, mais la libère lorsque Windows le demande. Je sais que c'est ainsi que SQL est censé fonctionner. Mais j'ai un administrateur Windows qui n'est pas convaincu que SQL retournera réellement la RAM, et sur ce serveur particulier (virtuel), SQL n'a pas besoin de beaucoup une fois Analysis Services terminé, mais il n'y a rien d'autre sur ce serveur qui dérange demandez beaucoup à SQL.
J'essaie donc de rassurer les administrateurs Windows que les problèmes avec l'environnement virtuel ne sont pas "parce que SQL utilise trop de RAM", mais je n'arrive pas à persuader SQL de le libérer sans redémarrer le service.
Lors du traitement des cubes, le service SQL prend volontiers 8 Go de RAM, mais comme il n'y a pas de pression, il n'en libère pas beaucoup pendant une journée normale. Les gars de Windows crient, et il serait bien plus agréable que SQL publie cela.
Je ne veux pas utiliser le paramètre de mémoire maximale, car je souhaite que SQL utilise autant de RAM lors du traitement. Je veux juste qu'il redescende ensuite.
C'est potentiellement un double de SQL Server ne libérant pas de mémoire et de récupération de mémoire à partir de SQL Server , mais je me demande s'il y a une réponse différente. Attendre que Windows récupère ne va pas convaincre les gars de Windows ici. Le redémarrage du service est une option, mais je ne suis vraiment pas fan de cette idée.
Je veux savoir comment demander à Windows de le récupérer ...
la source
sp_configure
est généralement quelque chose que vous devez définir une fois et laisser seul.Réponses:
Je crois que votre seule option est de redémarrer le service SQL ou d'exécuter une application qui consomme beaucoup de mémoire pour forcer SQL à le libérer.
J'aime la suggestion de @Nick Kavadias: surveiller le compteur de performances Mémoire: Défauts de page / Sec pour montrer que SQL n'a pas mis la mémoire du système d'exploitation sous pression.
la source
Une façon de leur montrer qu'il fera cela est d'avoir SQL Server mâcher toute la mémoire. Copiez ensuite un énorme fichier sur le réseau (les gros fichiers de sauvegarde SQL fonctionnent très bien pour cela). Cela entraînera le remplissage du cache système et Windows commencera à demander à SQL sa mémoire. SQL commencera à renvoyer la mémoire au système d'exploitation jusqu'à ce qu'elle atteigne votre paramètre de mémoire minimum.
(Désolé, nous n'avons pas obtenu la totalité de la question via Twitter, plus de 140 caractères étaient apparemment nécessaires.)
la source
Vous mentionnez des «cubes», il n'est donc pas clair si vous parlez de moteur AS ou de moteur relationnel. Le moteur relationnel peut libérer de la mémoire à la demande:
Où «nom du cache» est extrait de sys.dm_os_memory_clerks . La spécification de DBCC FREESYSTEMCACHE ne mentionne que les pools de gouverneurs, mais de nombreux autres caches peuvent être supprimés.
Mais si toute la mémoire est utilisée par le pool de tampons, l'expulsion de l'ensemble du pool de tampons entraînera une dégradation considérable des performances et une énorme charge d'E / S. Mieux vaut laisser SQL gérer cela lui-même.
la source
Avec les moteurs AS et DS, vous pouvez mettre un plafond sur la mémoire afin qu'ils restent en dessous d'un seuil sûr; ceci est recommandé sur 64 machines bith avec beaucoup de RAM et / ou plusieurs instances de SQL. Pour au moins le moteur de base de données, si vous modifiez la limite de mémoire en dessous de l'utilisation actuelle, cela réduira la quantité de mémoire à la volée sans avoir à redémarrer le service, mais pas sûr de SSAS.
la source
Le plus simple que j'ai trouvé est d'aller dans les propriétés de la mémoire du serveur, d'entrer une valeur plus petite, d'appliquer, d'attendre quelques minutes et d'ajuster la configuration.
Nous avons également constaté que la limitation de l'utilisation de la mémoire des serveurs SQL peut réellement améliorer les performances du serveur car elle donne à Windows plus de RAM pour la mise en cache, etc.
la source