Sé que a SQL le gusta la RAM, pero la libera cuando Windows pregunta. Sé que así es como se supone que funciona SQL. Pero tengo un administrador de Windows que no está convencido de que SQL realmente devolverá la RAM, y en este servidor (virtual) en particular, SQL no necesita mucho una vez que Analysis Services haya terminado, pero no hay nada más en este servidor que le moleste pedirle mucho a SQL.
Así que estoy tratando de asegurarles a los administradores de Windows que los problemas con el entorno virtual no son "porque SQL está usando demasiada RAM", pero parece que no puedo persuadir a SQL para que lo libere sin reiniciar el servicio.
Cuando se procesan cubos, el servicio SQL toma felizmente 8GB de RAM, pero debido a que no hay presión sobre él, no libera mucho de esto durante un día normal. Los chicos de Windows gritan, y sería mucho mejor que SQL lanzara esto.
No quiero usar la configuración de memoria máxima, porque realmente quiero que SQL use tanta RAM al procesar. Solo quiero que vuelva a bajar después.
Es potencialmente un duplicado de SQL Server que no libera memoria y reclama memoria de SQL Server , pero me pregunto si hay una respuesta diferente. Esperar a que Windows lo reclame no va a persuadir a los chicos de Windows aquí. Reiniciar el servicio es una opción, pero realmente no soy fanático de esa idea.
Quiero saber cómo hacer que Windows lo solicite de nuevo ...
fuente
sp_configure
generalmente es algo que debe configurar una vez y dejar solo.Respuestas:
Creo que su única opción es reiniciar el Servicio SQL o ejecutar una aplicación que consuma mucha memoria para obligar a SQL a liberarlo.
Me gusta la sugerencia de @Nick Kavadias: supervisar el contador de rendimiento Memoria: Fallos de página / Sec para mostrar que SQL no ha puesto la memoria del sistema operativo bajo presión.
fuente
Una forma de mostrarles que lo hará es hacer que SQL Server absorba toda la memoria. Luego copie un archivo enorme a través de la red (los archivos de copia de seguridad SQL grandes funcionan muy bien para esto). Esto hará que el caché del sistema se llene, y Windows comenzará a pedirle a SQL que le devuelva la memoria. SQL comenzará a devolver la memoria al sistema operativo hasta que alcance la configuración de memoria mínima.
(Lo siento, no recibí toda la pregunta a través de Twitter, aparentemente se necesitaban más de 140 caracteres).
fuente
Menciona "cubos", por lo que no está claro si habla del motor AS o del motor relacional. El motor relacional puede liberar memoria bajo demanda:
Donde 'nombre de caché' se toma de sys.dm_os_memory_clerks . La especificación de DBCC FREESYSTEMCACHE solo menciona grupos de gobernadores, pero en realidad se pueden expulsar muchos más cachés.
Pero si toda la memoria es utilizada por el grupo de búferes, desalojar todo el grupo de búferes dará como resultado una enorme degradación del rendimiento y una gran carga de E / S. Mejor deje que SQL maneje esto por sí mismo.
fuente
Con los motores AS y DS, puede poner un límite a la memoria para que permanezcan por debajo de un umbral seguro; Esto se recomienda en máquinas de 64 bits con mucha RAM y / o múltiples instancias de SQL. Al menos para el motor de la base de datos, si cambia el límite de memoria por debajo del uso actual, reducirá la cantidad de memoria sobre la marcha sin tener que reiniciar el servicio, aunque no estoy seguro sobre SSAS.
fuente
Lo más fácil que he encontrado es ir a las propiedades de memoria del servidor, ingresar un valor menor, aplicar, esperar unos minutos y volver a ajustar la configuración.
También hemos encontrado que el uso de memoria de los servidores sql de estrangulamiento en realidad puede mejorar el rendimiento del servidor, ya que le da a Windows más ram para el almacenamiento en caché, etc.
fuente