SQL Server Max Memory no limita el uso de RAM

18

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.

Martin Sjöberg
fuente

Respuestas:

20

La configuración de memoria máxima de los servidores SQL define los límites solo para el uso de la agrupación de almacenamiento intermedio. Habrá asignaciones variables pero significativas requeridas más allá de ese límite.

Jonathan Kehayias , Christian Bolton y John Samson tienen publicaciones de nivel 300/400 sobre el tema. Brent Ozar tiene un artículo más fácil de leer que podría ser un mejor lugar para comenzar.

También relacionado: SQL Server 2008 R2 "Memoria fantasma"

Mark Storey-Smith
fuente
Sí, estoy de acuerdo en que limita el grupo de búferes solamente. Gracias por los marcadores que miraré en ellos.
Martin Sjöberg
Estoy leyendo sobre esos enlaces y hay algunas cosas buenas allí definitivamente. Actualizaré mi pregunta con lo que descubro. También me siento aliviado de tener disponible el número de Max Pizzeria ... ¿Me pregunto si hacen la entrega a domicilio?
Martin Sjöberg
16

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):

  • Correo de base de datos
  • SQLCLR
  • Procedimientos almacenados extendidos
  • Los binarios ellos mismos
  • Correo SQL
  • SSIS
  • SSAS
  • SSRS
mrdenny
fuente
De lo mencionado anteriormente, utilizamos los binarios ofc y ssis en este servidor.
Martin Sjöberg el
1
¿Qué otro software está instalado en el servidor? Y me refiero a cualquier cosa. Conductores MPIO, Flash controladores de unidad de copia de seguridad, software, antivirus, sys-internals, etc.
mrdenny
El servidor está bastante limpio y recién instalado, pero ofc tenemos algunos allí. Intentaré obtener una lista completa al final de esta semana. Breve y de mi memoria ... tenemos un iodrive (dell), mcafee, processexplorer en el escritorio, iometer, treesize ...
Martin Sjöberg
1
El controlador FusionIO necesita mucha memoria para trabajar. Probablemente eso sea mucho.
mrdenny
¿Es posible probar esto? ¿O para configurarlo para usar menos RAM? Hasta ahora, parece liberar RAM cuando es necesario y no he notado ningún inconveniente, pero solo en caso de que tengamos que aumentar la cantidad de paquetes de Ssis, estoy preocupado por lo que podría suceder con el uso de RAM.
Martin Sjöberg
2

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

Craig Efrein
fuente
"Es posible" que necesite reiniciar SQL Server. No siempre se requiere. ¿Conoces las condiciones bajo las cuales se requiere o no un reinicio para liberar memoria?
Nick Chammas
Editaría estos detalles en su respuesta existente y eliminaría esta. Quizás mrdenny pueda responder a su pregunta sobre el lavado de páginas sucias.
Nick Chammas
1
Correcto, SQL no puede liberar una página de memoria mientras está sucia (se ha escrito en). Cada vez que el sistema revisa las páginas sucias se escriben en el disco. No creo que cambiar la memoria máxima del servidor provoque un punto de control.
mrdenny
1
Reiniciar la instancia para cambiar la configuración de la memoria podría ser un gran error. Si bien cambiar la configuración de la memoria no causa una CHECKPOINToperació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 el CHECKPOINTcomando 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.
Jon Seigel