Reporting Services también quiere memoria!!

sqlserver2012

LLevo varios dias con un servidor recién instalado SQL Server 2012 que me está consumiendo toda la memoria. De lo primero que me fijé fue en que Reporting consumía del tirón 3/5GB (de un total de 16GB) casi sin pestañear. Empecé a tunear un poco el SQL Server restrigiendo memoria, mirando las queries, los jobs, etc.

Pues bien, resulta que Reporting Services también quiere memoria y es por defecto que si no le dices cuanta debe usar como máximo, si la necesita  la usará toda. Asi es que nos podemos ver en un momento dado desbordados si no controlamos esto. Para ello y antes de tocar nada, voy a explicar como funciona todo el mecanismo de asignación de procesos para que podamos tener en cuenta que estamos tocando Smile.

Administración de memoria. Reporting Services tiene que controlar tres  partes principalmente (también llamadas aplicaciones):

  • El administrador de informes es la aplicación front-end web con se usa de interfaz de cara al usuario y que es la que vemos cuando accedemos al servidor de informes.
  • Servicio Web. Se usa para procesar los informes interactivos y las peticiones.
  • Aplicación de procesamiento en segundo plano. Como su nombre bien indica, se utiliza para el procesado de informes programados, suscripciones y mantenimiento de la bbdd. 

En base a estas tres aplicaciones/servicios se introduce el concepto de presión de memoria. Digamos que según la cantidad de memoria de la que se tiene en el servidor y la que se está utilizando podremos tener tres estados que vamos a definir a continuación.

Modelo de proceso:

  1. Baja. Las solicitudes actuales continuarán en proceso.
    • Se siguen aceptando nuevas peticiones
    • A las aplicaciones de segundo plano se le da menor prioridad de procesamiento que a las que llegan via servicio web.
  2. Media. Las solicitudes actuales continúan en proceso.
    • Se podrían aceptar nuevas peticiones
    • A las aplicaciones de segundo plano se le da menor prioridad de procesamiento que a las que llegan via servicio web.
    • Se reducen la asignación de memoria para las tres aplicaciones de servidor.
    • La reducción de memoria a los servicios de fondo es mayor para poder atender a las solicitudes de los servicios servicios web.
  3. Alta.
    • Se reducen aún más la asignación de memoria y no se aceptan nuevas peticiones.
    • Se deniegan las aplicaciones de servidor que solicitan más memoria y las actuales tardan más en procesarse.
    • El servidor de informes intercambia archivos de datos en memoria al disco.
    • Si no hay memoria suficiente para atender a las peticiones, el servidor nos devolverá un error HTTP 503 (no disponible) hasta que se completen las actuales peticiones y se reduzca la presión de memoria.

Como véis la presión de memoria es un muy importante para nuestro servidor, y según el modelo de proceso, podemos ver como pasamos del estado en que casi podemos pedir mucho a que se nos pueda denegar la entrada.

Estas acciones son llevadas a cabo por cada servicio/instancia de Reporting Services y no por cada petición y/o solicitud. Estos estados se controlan con parámetros en el archivo de configuración RSReportServer.config

Valores de configuración para la administración de memoria.

Para poder controlar la asignación de memoria, reporting services usa los siguientes valores:

WorkingSetMaximum y WorkingSetMinimum son usados para definir el intervalo de memoria disponible en una instancia de Reporting Services.

  •  
    • WorkingSetMinimum. Especifica el límite mínimo de memoria a consumir por Reporting Services. Por defecto no viene definido en el archivo y usa el 60% de valor de WorkingSetMaximum. La unidad para expresar la cifra se hacen Kilobytes (KB).
    • WorkingSetMaximum. Especifica el máximo de memoria a consumir por Reporting Services. Por defecto este valor es el máximo de memoria del servidor y al igual que WorkingSetMinimum no viene especificado en el archivo por defecto. Una vez superado este valor, el servidor de informes no aceptará más solicitudes y las que se encuentran podrán completarse.  Solo cuando vuelva a bajar la memoria por debajo de este valor se aceptarán nuevas solicitudes. Si las solicitudes existentes siguen consumiendo memoria adicional a este valor, se reciclarán todos los dominios de aplicación del servidor de informes.

MemorySafetyMargin y MemoryThreshold  se especifican para establecer los límites de los niveles bajo, medio y alto de presión de memoria.

  •  
    • PresionMemoriaMemoryThreshold. Especifica en porcentaje en base al valor WorkingSetMaximum que define el límite entre los escenarios de presión alta y media.  Por defecto el valor es 90.
    • MemorySafetyMargin. Especifica un porcentaje en base al valor WorkingSetMaximum que define el límete entre los escenarios de presión media y baja. El valor predeterminado es 80.

En resumen, comprendiendo bien como funcionan estos conceptos podemos ajustar nuestro servidor para diferentes tipos de peticiones según las necesidades de nuestro entorno. En mi caso, y pesar de la que la documentación del producto aconseja tener los servicios en diferentes máquinas yo los tengo todo funcionando en la misma por lo que he tenido trastear con ellos para dejar fino el servidor.

Referencia: http://msdn.microsoft.com/es-es/library/ms159206.aspx

Espero que os se de interés,

Un Saludo

Sin categoría

One thought on “Reporting Services también quiere memoria!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *