La mémoire maximale de SQL Server ne limite pas l'utilisation de la RAM

18

J'aimerais avoir votre avis là-dessus. J'ai un serveur sql 2008r2 Ent. Ed. 64 bits avec 16 cœurs et 64 Go de RAM. Il existe une instance de SQL Server entièrement corrigée à partir de 20111014.

Le ram max est réglé sur 60000 Mo. Le nombre de ram gratuits est de 0 selon le gestionnaire de tâches après quelques jours en ligne.

Si je modifie le ram max en dessous de 53 Go, il se stabilisera après quelques jours et aura un ram gratuit.

C'est le processus sql qui alloue le ram selon le gestionnaire de tâches. Comment puis-je comprendre quel est réellement le problème? Il va sans dire que j'ai déjà fait beaucoup de tests mais que je n'ai pas encore résolu cela à mon goût. et ohh nous n'obtenons pas le retard de famine typique lorsque le ram disponible est à 0 libre.

Mise à jour 1:

Inspiré par un autre Q / A lié à la RAM sur cette page /dba//a/7062/2744 . J'ai utilisé ces deux pour voir à quoi sert la RAM.

SELECT TOP ( 10 )
        [type] AS [Memory Clerk Type] ,
        SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM    sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION  ( RECOMPILE ) ;

SELECT  DB_NAME(database_id) AS [Database Name] ,
        COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM    sys.dm_os_buffer_descriptors
--WHERE   database_id > 4 -- system databases
--        AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC
OPTION  ( RECOMPILE ) ;

La quantité utilisée indiquée par ceux-ci est d'abord de 7948432 Ko, puis de 44030 57812 Mo, soit un total d'environ 52 Go utilisés par le serveur SQL ... alors où est passé le reste de ma RAM? :-) Le gestionnaire de tâches affiche en ce moment 363 en cache, 401 disponibles, 40 gratuits et sqlservr.exe a un ensemble privé de mémoire 64 459 656. Max Ram défini sur 60000 Mo comme auparavant.

Martin Sjöberg
la source

Réponses:

20

Le paramètre de mémoire maximale des serveurs SQL définit uniquement les limites d'utilisation du pool de mémoire tampon. Des allocations variables mais importantes seront nécessaires au-delà de cette limite.

Jonathan Kehayias , Christian Bolton et John Samson ont des messages de niveau 300/400 sur le sujet. Brent Ozar a un article plus facile à lire qui pourrait être un meilleur point de départ.

Également lié: SQL Server 2008 R2 «Mémoire fantôme»

Mark Storey-Smith
la source
oui, je suis d'accord qu'il limite uniquement le pool de mémoire tampon. Merci pour les signets que je vais examiner.
Martin Sjöberg,
Je lis sur ces liens et il y a de bonnes choses là-bas. Je mettrai à jour ma question avec ce que je découvre. J'ai aussi l'impression que j'ai le numéro de Max Pizzeria facilement disponible ... Je me demande s'ils font la livraison à domicile?
Martin Sjöberg
16

Comme indiqué, le pool de tampons et le cache de procédures sont les seules choses contrôlées par la mémoire maximale du serveur. Il y a beaucoup d'autres choses dans SQL Server qui peuvent consommer de la mémoire au-delà de cette limite. Ils comprennent (mais ne sont pas limités à):

  • Messagerie de base de données
  • SQLCLR
  • Procédures stockées étendues
  • Les binaires eux-mêmes
  • SQL Mail
  • SSIS
  • SSAS
  • SSRS
mrdenny
la source
Parmi les éléments mentionnés ci-dessus, nous utilisons les binaires ofc et ssis sur ce serveur.
Martin Sjöberg
1
Quels autres logiciels sont installés sur le serveur? Et je veux dire n'importe quoi. Pilotes MPIO, pilotes de lecteur Flash, logiciel de sauvegarde, anti-virus, sys-internals, etc.
mrdenny
Le serveur est assez propre et récemment installé mais nous en avons bien sûr là-bas. J'essaierai de dresser une liste complète à la fin de cette semaine. Bref et de ma mémoire ... nous avons un iodrive (dell), un mcafee, un processexplorer sur le bureau, un iomètre, une taille d'arbre ...
Martin Sjöberg
1
Le pilote FusionIO a besoin de beaucoup de mémoire pour fonctionner. Cela en prend probablement beaucoup.
mrdenny
Est-il possible de le prouver? Ou pour le configurer pour utiliser moins de RAM? Sofar, il semble libérer de la RAM quand il le faut et je n'ai remarqué aucun inconvénient, mais au cas où nous devrions augmenter la quantité de packages ssis, je suis préoccupé par ce qui pourrait arriver avec l'utilisation de la RAM.
Martin Sjöberg
2

http://msdn.microsoft.com/en-us/library/ms178067.aspx

Pour réduire la mémoire maximale du serveur, vous devrez peut-être redémarrer SQL Server pour libérer la mémoire.

Si je comprends bien, si une page du pool de tampons n'a pas été écrite sur le disque, elle ne sera pas publiée tant qu'elle ne le sera pas.

La réduction du paramètre de mémoire maximale entraîne-t-elle le vidage des pages sales par SQL Server?

Il pouvait surveiller le gestionnaire de tampons dans perfmon pour le vérifier. Perfmon -> SQLServer: Buffer Manager: Pages de base de données

Craig Efrein
la source
Vous "devrez" peut-être redémarrer SQL Server. Ce n'est pas toujours obligatoire. Connaissez-vous les conditions dans lesquelles un redémarrage est ou n'est pas nécessaire pour libérer de la mémoire?
Nick Chammas
Je voudrais modifier ces détails dans votre réponse existante et supprimer celle-ci. Peut-être que mrdenny peut répondre à votre question sur le vidage des pages sales.
Nick Chammas
1
Correct, SQL ne peut pas libérer une page mémoire alors qu'elle est sale (a été écrite dans). Chaque fois que les points de contrôle du système les pages sales sont écrites sur le disque. Je ne crois pas que la modification de la mémoire maximale du serveur provoque un point de contrôle.
mrdenny
1
Redémarrer l'instance pour modifier les paramètres de mémoire pourrait être une grosse erreur. Bien que la modification des paramètres de mémoire n'entraîne pas d' CHECKPOINTopération sur les bases de données, elle vide le cache de procédure. Si vous redémarrez l'instance uniquement pour modifier les paramètres de mémoire, non seulement le cache de procédure sera froid, mais le cache de données sera également froid. Si la mémoire maximale ne peut pas être réduite en raison de pages sales en mémoire, exécutez leCHECKPOINT commande sur les bases de données pour vider les pages sales sur le disque, puis modifiez le paramètre de mémoire aux heures creuses sans redémarrer l'instance.
Jon Seigel