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.
la source
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 à):
la source
À partir de SQL 2012, single_pages_kb a été remplacé par pages_kb dans ce DMV. https://msdn.microsoft.com/en-us/library/ms175019.aspx?f=255&MSPPError=-2147217396
Donc, si vous souhaitez exécuter la requête incluse dans la question, sur un serveur 2012+, supprimez la chaîne single_.
la source
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
la source
CHECKPOINT
opé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.