En los últimos días he participado en una interesante cable en el foro de SSAS con respecto a lo que sucede cuando realiza una actualización de proceso en una dimensión. Este es un tema que no se entiende mucho y, de hecho, no conocía todos los detalles hasta hoy, pero es muy importante, sin embargo: uno de los problemas de rendimiento más comunes que veo en mi trabajo de consultoría son particiones que tienen agregaciones diseñadas para ellas, pero donde esas agregaciones no están en un estado procesado porque se ha realizado una actualización de proceso en una o más dimensiones. De todos modos, justo ahora Akshai Mirchandani del equipo de desarrollo publicó una muy buena descripción general de lo que realmente sucede cuando ejecuta una actualización de proceso en este hilo, así que pensé en copiar aquí para asegurarme de que tenga una audiencia más amplia:

Aquí hay un breve resumen de lo que sucede cuando realiza ProcessUpdate:

1. Después de actualizar la dimensión, el servidor analiza los cambios realizados en la dimensión. En 2005, este análisis fue bastante sencillo y, a menudo, detectó incorrectamente que se habían producido cambios importantes que requerían la limpieza de índices y agregaciones. En 2008, este código se mejoró para que se dé cuenta con mayor frecuencia de que no ha sucedido nada significativo. Esta es una optimización bastante pequeña (pero útil). ¡Supongo que nadie pensó que valía la pena documentarla!

2. En función de este análisis, el servidor decidirá si los índices y las agregaciones deben borrarse o no. Si este no es el caso (por ejemplo, porque solo se agregaron registros y no se eliminaron/actualizaron), las particiones no se verán afectadas.

3. Si es necesario borrar índices/agregaciones, el servidor verificará si se ha habilitado ProcessAffectedObjects. Si es así, en lugar de borrar índices/agregaciones, reconstruirá índices/agregaciones.

4. Borrar índices/agregaciones también aparece como «operaciones de procesamiento de particiones» en Profiler; esta es una de las cosas que tiene a algunos de ustedes confundidos.

5. Cuando se borran las agregaciones, solo se deben borrar las agregaciones flexibles porque las relaciones rígidas nos aseguran que los miembros no pueden haberse movido y, por lo tanto, las agregaciones no pueden haber cambiado. Sin embargo, es posible que los índices aún hayan cambiado y, por lo tanto, aún puede ver que las tareas de procesamiento de particiones comienzan a borrar los índices.

6. ProcessIndexes y ProcessClearIndexes se ocupan de la creación de índices y agregaciones de mapa de bits (también conocido como mapa); el contexto es que las agregaciones y los índices de mapa de bits se consideran genéricamente «índices».

La conclusión principal aquí es que si está procesando una dimensión con ProcessUpdate, debería considerar seriamente hacer ProcessAffectedObjects o un ProcessIndexes explícito en las particiones afectadas para que se reconstruyan los índices de mapa de bits y las agregaciones flexibles. El beneficio de hacer ProcessIndexes explícitamente es que puede poner su cubo en línea antes y los índices/agregaciones se procesan más lentamente en segundo plano; varios clientes prefieren hacer esto porque sus ventanas de procesamiento son demasiado pequeñas para esperar a que se procesen los índices. ser tratado.

También relacionado con este tema, pensé en señalar un excelente artículo de Darren Gosbell donde muestra cómo saber si sus agregaciones se están procesando o no:

http://geekswithblogs.net/darrengosbell/archive/2008/12/02/ssas-are-my-aggregations-processed.aspx