Para entender el funcionamiento de Reporting Services en cuanto al rendimiento, es conveniente saber que hay 3 fases en la ejecución del informe: “data retrieval” (traerse de los datos puros desde Analysis Services), “procesing” (el procesado de los datos dentro del informe) y “rendering” (componer el informe para su visualización).

 

 

Para poder saber en qué fase del proceso de ejecución del informe se está yendo el tiempo, existe una tabla en Reporting Services llamada “ExecutionLog” que muestra, entre otras cosas, el tiempo en milisegundos que tarda un informe de cada fase. La tabla “ExecutionLog” se encuentra dentro de la base de datos “Report Server” y las columnas a mirar son “TimeDataRetrieval”, “TimeProcessing”, y “TimeRendering”.

 

·         Si el tiempo se estuviese yendo en la fase del “Data Retrieval”, se podría intentar disminuírel número de registros que se traen (a lo mejor no hacen falta todos, mirar si se pueden filtrar) o ver si la red por la que viajan los datos es lenta o remota…

 

·         Si el tiempo se estuviese yendo en la fase de “Processing” del informe, es decir, el tiempo de procesamiento de los datos que nos hemos traído del servidor, mediante operaciones de agrupamiento, filtrado, operaciones de agregado, ordenamiento, código añadido por el desarrollador, se podría analizar si se podrían minimizar o realizar en Analysis Services antes de traernos los datos. Por ejemplo, una matriz tardaría más en ejecutarse que una tabla.

 

·         Si el tiempo se estuviese yendo en la fase de “Rendering”, o sea, con la información que se muestra finalmente al usuario, y como se muestra ésta, habría ciertos factores que influirían como el número y tipos de controles, la relación entre ellos, el formato y la cantidad de datos mostrada.

También te comentaba adjunto un enlace que contiene los pasos a seguir sobre como mostrar la información de la tabla ExecutionLog en caso de que queráis mostrarla en un informe de una manera más presentable por si lo queréis mostrar a alguien más:

 

Monitoring Report Execution Performance with Execution Logs

http://msdn2.microsoft.com/en-us/library/Aa964131.aspx

 

 

Ciclo de ejecución de informes

 

*      5 Fases:

*      Ejecución de la consulta que nos traerá con los datos a utilizar en el informe

*      Retorno de datos, operaciones de agrupado y cálculo de agregados

*      Ordenación y filtrado

*      Funciones de agregado posterior como: Running Results, First, Last, Previous (agregados especiales basados en el orden de los datos)

*      Creación de la instancia del informe (la creación del Snapshot)

 

Consideraciones

*      Un informe Snapshot contiene la instancia completa (Datos combinados con formato)

*      Matrix/Chart son más caros que otros controles (son bidimensionales)

*      Funciones de Agregado posterior son más caros que otras funciones de agregado

 

 

Optimización de procesamiento

*      Devolver la menor cantidad de datos en las consultas (no traerse datos de detalle si solo necesitamos los valores de agregado, usar DrillThrough para mostrar detalles)

*      Restringir las consultas con la clausula WHERE

*      Mover agregados complejos al servidor

 

Optimización de ejecución

*      Bajo Demanda:

*      Necesitamos los datos actualizados en todo momento

*      Crea formato intermedio y lo guarda en la Caché

*      Programado de antemano:

*      Utilizar mecanismos de Cache desde el Report Manager

*      Crear Snapshots y verlos a trav'es de su historia en el Report Manager

 

Maria Esteban

Ingeniero de Soporte de Reporting Services