Me gustaría su opinión sobre esto. Tengo un servidor sql 2008r2 Ent. Ed. 64 bits con 16 núcleos y 64 GB de RAM. Hay una instancia de SQL Server parcheada completamente a partir de 20111014.
El ram máximo está configurado en 60000MB. La cantidad de memoria RAM gratuita es 0 según el administrador de tareas después de unos días en línea.
Si cambio la memoria RAM máxima a menos de 53 GB, después de unos días se estabilizará y tendrá algo de memoria RAM libre.
Es el proceso sql el que asigna el RAM según el administrador de tareas. ¿Cómo llego a un acuerdo con cuál es realmente el problema? No hace falta decir que ya hice muchas pruebas, pero aún no lo he resuelto a mi gusto. y, ohh, no obtenemos el retraso típico de falta de memoria cuando la memoria RAM disponible está a 0 libre.
Actualización 1:
Inspirado en otro Q / A relacionado con RAM en esta página /dba//a/7062/2744 . Usé estos dos para ver para qué se usa 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 cantidad utilizada mostrada por estos son primero seleccione 7948432 Kb segundo 44030,57812 MB que es un total de aproximadamente 52 GB utilizados por el servidor sql ... entonces, ¿a dónde se fue el resto de mi RAM? :-) El administrador de tareas muestra ahora en caché 363, 401 disponible, 40 gratis y sqlservr.exe tiene un conjunto privado de memoria 64 459 656. Max Ram configurado a 60000 MB como antes.
fuente
Como se dijo, el grupo de búferes y el caché de procedimientos son las únicas cosas que controla la memoria máxima del servidor. Hay muchas otras cosas dentro de SQL Server que pueden consumir memoria más allá de ese límite. Incluyen (pero no se limitan a):
fuente
Desde SQL 2012 en adelante, single_pages_kb fue reemplazado por pages_kb en ese DMV. https://msdn.microsoft.com/en-us/library/ms175019.aspx?f=255&MSPPError=-2147217396
Entonces, si desea ejecutar la consulta incluida en la pregunta, en un servidor 2012+, elimine la cadena single_.
fuente
http://msdn.microsoft.com/en-us/library/ms178067.aspx
Para reducir la memoria máxima del servidor, es posible que deba reiniciar SQL Server para liberar la memoria.
Tengo entendido que si una página en el grupo de búferes no se ha escrito en el disco, no se lanzará hasta que lo esté.
¿La reducción de la configuración de memoria máxima hace que SQL Server elimine las páginas sucias?
Podía monitorear el administrador de búfer en perfmon para verificar eso. Perfmon -> SQLServer: Administrador de búfer: páginas de base de datos
fuente
CHECKPOINT
operación en las bases de datos, sí elimina el caché del procedimiento. Si reinicia la instancia solo para cambiar la configuración de la memoria, no solo el caché del procedimiento estará frío, sino que el caché de datos también estará frío. Si no se puede reducir la memoria máxima debido a páginas sucias en la memoria, ejecute elCHECKPOINT
comando en las bases de datos para vaciar las páginas sucias en el disco, luego cambie la configuración de la memoria en la hora pico sin reiniciar la instancia.