Cómo equilibrar la memoria de SQL Server con la memoria de SQL Server Analysis Services

11

Tenemos muchos sistemas que tienen la misma configuración.

  • Un servidor (virtual o físico)
  • Ejecución de SQL Server (SQL) y SQL Server Analysis Server (AS)
  • múltiples núcleos
  • 16 gb de RAM

Cada noche, el Servidor SQL procesará aproximadamente 2-3 horas, seguido de 2-3 horas de procesamiento AS. Luego, durante todo el día, solo se consultan los AS.

Suponiendo que este es un servidor dedicado, y que ninguna otra aplicación es preocupante, y que los dos conjuntos de procesamiento son completamente sincrónicos, sin superposiciones siempre uno tras otro, ¿cómo puedo establecer mejor los límites de memoria del servidor SQL y AS?

La razón para preguntar es que si no establezco un límite para SQL, tomará toda la memoria que pueda. Sin embargo, entiendo que SQL felizmente renunciará a esta memoria si:

  • No lo está usando y

  • Otro servicio / programa lo solicita.

Entonces, desde una perspectiva lógica, creo que permite que SQL tome todo lo que necesita, pero no estoy tan seguro acerca de AS ' TotalMemoryLimit. No estoy seguro de si AS renunciará a su memoria. De hecho, leer más me lleva a creer que está mal dejar que se lo lleve todo.

¿Esto significa que realmente necesito establecer límites para ambos? Estoy confundido sobre cuáles deberían ser las mejores prácticas y lo que necesitamos medir teniendo en cuenta que los procesos no se superponen.

Espero que esto tenga sentido.

Sangha Preet
fuente

Respuestas:

9

Creo que es factible forzar las manos de ambos servicios al tener una tarea o servicio programado que:

(a) antes del procesamiento nocturno de SQL Server, apaga el servicio SSAS y aumenta la memoria asignada a SQL Server

(b) después de que SQL Server haya realizado su procesamiento, reduce la memoria máxima del servidor y reinicia SQL Server

(c) comienza SSAS

Esto supone que no se requiere que SSAS esté en línea mientras SQL Server está procesando. De lo contrario, cambie (a) de "apagado" a "reinicio" ... siempre y cuando SSAS no esté haciendo nada activamente mientras SQL Server está procesando, no debería haber ninguna preocupación de que robará la memoria.

Esto también supone que desea que cada servicio solape el consumo de memoria y use la misma memoria en diferentes momentos: estoy seguro de que hay formas con afinidad / NUMA, etc. para segregar completamente su espacio de operaciones o, en el peor de los casos, para alojar ellos en diferentes máquinas.

Aaron Bertrand
fuente
Creo que quizás también deberíamos reiniciar SQL después del procesamiento SASS, ya que hace una lectura grande (almacén de datos).
Salude a Sangha el
Realmente pensando en ello: ¿el reinicio del servidor SQL no afectará realmente todo el procesamiento de SQL?
Salude a Sangha el
1
@ Saludo sí, ¿no es ese el punto?
Aaron Bertrand
7

¿Es necesario que SQL y SSAS se ejecuten al mismo tiempo? Si no, ¿estás 100% seguro?

Me gustaría ver la configuración de memoria para SQL y SSAS para ver si pueden cooperar entre sí.

Tendremos que dejar algo de memoria para el sistema operativo, otros procesos y asignaciones de varias páginas. Quizás 4G?

Intenta algo como esto ...

En el lado de SQL, configure Max Server Memory en 12G y Min Server Memory en 6G.

En el lado de SSAS, establezca TotalMemoryLimit en 12G y LowMemoryLimit en 6G.

Además, no habilite Bloquear páginas en la memoria.

Pruebe algunas iteraciones, ajustando estos números hacia arriba o hacia abajo.

Si esto simplemente no funciona, y usted sabe de hecho que SQL y SSAS no necesitan ejecutarse al mismo tiempo, entonces probaría la sugerencia de Aaron de programar trabajos para apagar y encender los servicios.

Steven
fuente