none
Mejorar Performance en Cubos

    Pregunta

  • Hola expertos:

    Tengo un modelo SSAS que despliega los resultados muy lento.

    Las tablas que consultan mis cubos son en realidad Vistas. Las vistas en DWH no cuentan ni con llaves primarias ni foraneas. Las relaciones están definidas en las vistas de los cubos (son 7) en SSAS. 

    Mis tablas (vistas) en DWH son muchas y muy grandes (DWH total 1,2 TB ). Estas cuentan con varios millones de registros.

    Mi idea es convertir las vistas a tablas, y definirles sus llaves primarias y foraneas directamente en Managment Studio. Asi mismo separar los 7 cubos en 7 modelos independientes (aunque obtienen los datos del mismo DWH) El modelo SSAS actual tiene mas de 350 GB.

    Los usuarios de cada cubo no acceden a otro cubo que no les corresponde.

    1. ¿Los cubos cuentan ya con los datos del DWH o los obtiene conforme las consultas de Excel?

    2. ¿Existe una mejora si el DWH trabaja con tablas en lugar de Vistas?

    3. ¿Sería mas rápidas las consultas al contar con las llaves en el DWH aunque ya están las relaciones definidas en los cubos?

    4. ¿Obtendría mejor performance en mis consultas en Excel? 

    Agradezo de antemano sus comentarios.

    lunes, 8 de enero de 2018 20:28

Todas las respuestas

  • Pero dónde tienes el problema, al Procesar el cubo o al consultarlo?

    A no ser que estés usando DirectQuery, lo normal es que en el momento de Procesar el cubo se lean todos los datos del DWH y se dejen almacenados dentro del cubo. Si el procesamiento es total, te da igual que sean vistas, no merece la pena convertirlas en tablas ni definirles índices. Únicamente si quisieras hacer cargas incrementales, o particionar el cubo y cargar una única partición serían útiles esos índices.

    Pero según indicas, tu problema no está en la carga del cubo ("Process") sino en las consultas al mismo. Para acelerar esas consultas, lo que te convendría hacer es optimizar las Agregaciones (que cumplen en el cubo una función similar a la que cumplirían los índices en las tablas de una base relacional). Aunque las agregaciones se pueden hacer a mano, hay un asistente para optimizarlas que cumple una función similar al DETA en la base de datos relacional.

    Respuestas:

    1. Sí, los cubos cuentan ya con los datos del DWH (que se actualizan cuando seleccionas "Procesar"), a no ser que los hayas configurado en modo DirectQuery, que me imagino que no es el caso.

    2. Como ya hemos dicho, si no usas DirectQuery no se gana nada en el momento de la consulta usando tablas en lugar de vistas (puesto que la consulta se resuelve desde los datos copiados al cubo y no acude el DWH). Ojo con las tablas de dimensiones, según cómo tengas configurado su Storage podrías tenerlas configuradas para acudir al DWH al hacer consultas. De ser así, sí que sería importante que estuvieran indexadas.

    3. Si tienes todo configurado para que los datos se almacenen en SSAS (que es la confguración predeterminada), entonces no, no serían más rápidas las consultas poniendo llaves en el DWH. De hecho, si haces una captura con el Profiler verás que ni siquiera envía ninguna query al motor relacional en el momento de hacer una consulta.

    4. Para la mejor performance de las consultas (desde Excel o desde cualquier otro sitio), y suponiendo que esté todo configurado para almacenar datos en el cubo, lo mejor es que optimices las Agregaciones.

    • Propuesto como respuesta Jorge Turrado lunes, 8 de enero de 2018 22:58
    lunes, 8 de enero de 2018 20:56
  • Hola Jorge,

    Mil gracias por tus comentarios. Me abren mucho el panorama.

    DirectQuery podría decir que no lo uso, pues nunca he especificado nada diferente a lo predeterminado. 

    Entiendo que no para cada consulta en Excel esta buscando los datos en el DWH, dado que el mismo cubo contiene ya toda la información. Pero, entonces porque la diferencia tan grande entre la DWH en Management Studio (1,2 TB) al cubo 350 GB. Como le hace para reducir tanto el tamaño del archivo? 

    Es mas, el cubo contiene información que no tiene el DWH como son las consolidaciones y cálculos. Solo esto es mucha información adicional.

    He visto las particiones y agregaciones. Entiendo que las agregaciones se pueden optimizar, pero no acabo de enteder los diferentes niveles de agregaciones. Hay algún lugar donde pueda estudiar estos niveles? y como saber definir el nivel de agregaci¡on que debo elegir para cada elemento?

    Que hay de dividir el modelo de 7 cubos en un modelo por cubo? Eso ayuda al performance?

    Saludos y que tengas buen día


    • Editado AlopezBI martes, 9 de enero de 2018 10:42
    martes, 9 de enero de 2018 7:23
  • Bueno, el cubo te ocupa del orden de la cuarta parte del DWH. Habría que ver cómo de optimizado está el DWH, hay que tener en cuenta que tendrá índices, que pueden ocupar mucho, que las tablas no ocupan el espacio al 100% porque solo meten los registros que caben en cada página de 8K y se desperdicia el resto, que puede haber espacio de sobra en los archivos mdf, habría que ver si has smado ahí el espacio del log... Y luego habría que ver si estás trayendo todos los campos al cubo o solo algunos de ellos. En fin, que es un cálculo bastante complejo, hay muchas cosas a tener en cuenta, pero en suma no es disparatado que el cubo ocupe considerablemente menos que el datawarehouse.

    Para las agregaciones, usa el asistente, preferiblemente el asistente que optimiza en base a una captura previa de cuáles son las consultas que se reciben (hay que activar antes los logs, ya que por defecto no las captura). Hay también otro asistente que optimiza en base a un hipotético "porcentaje de mejora" o "espacio de almacenamiento adicional", que puedes ajustar. La verdad es que yo nunca he hecho las agregaciones manualmente, solo he usado el asistente.

    Lo de usar 7 cubos ayudará si te salen más pequeños. Pero igualmente convendrá que les optimices las agregaciones, incluso aunque sean más pequeños-

    • Propuesto como respuesta Pablo Rubio martes, 16 de enero de 2018 16:41
    martes, 9 de enero de 2018 18:49
  • Hola Alberto,

    Agradezco tus aclaraciones. Entiendo lo del tamaño de los archivos, efectivamente es muy complejo. Lo que quería saber es si el cubo contenía persé información del DWH o la extraía en cada consulta. Veo que si (en parte).

    Respecto a las agregaciones, definitivamente uso el asistente. Sin embargo ahí mismo, me aparecen diferentes niveles de agregación para cada elemento (A0 - An) (Facts & Dimensions). Esa parte no entiendo.

    1. ¿Como entiendo estos niveles de agregaciones?

    2. ¿Como puedo saber que nivel me conviene para cada elemento?

    3. Veo que se puede simplemente elegir la agregación A4 (por ejemplo), o bien desde A0 hasta A4.

    Independientemente de partir los cubos o no, me queda claro que se tienen que trabajar las agregaciones.

    Gracias

    miércoles, 10 de enero de 2018 10:08
    • Propuesto como respuesta Pablo Rubio martes, 16 de enero de 2018 16:41
    miércoles, 10 de enero de 2018 18:21
  • Gracias Alberto.

    Estoy revisando los links que me enviaste.

    Voy entendiendo un poco mas, pero aun tengo muchas dudas. Espero cuando termine de revisar todos los links, ya tenga algo mas esclarecido.

    Me reporto nuevamente cuando termine de leer todo.

    Saludos

    miércoles, 10 de enero de 2018 20:32