[SSAS] Améliorer le Process d’un cube tabulaire

Il existe plusieurs méthodes pour améliorer le process des cubes tabulaires, une partie emprunté au cube Multidimensionnel, une autre plus spécifique au mode tabulaire.

Dans un premier temps, il faut bien identifier la cause du long process, est-ce la requête SQL qui est longue, le réseau qui est saturé ou analysis services ? Pour la partie Analysis Services, voici quelques astuces permettant d’améliorer le process.


Pour la partie commune, il y a les choses à éviter avant tout :

  • Les clés des tables de fait qui sont inutiles (et tout autre colonne)
  • Les dimensions trop grandes
  • Vérifier les relations entre les dimensions et fait
  • Factoriser les dimensions pour réduire le nombre de cardinalité (ex : Age d’un client -> catégorisé en « Entre 25 et 30 ans »)

Et les points techniques communs aux deux environnements au niveau de la data source :

  • Le provider de la source de données (OLEDB for SQL Server ou SQL Server Native Client)
  • Nombre de connexion maximum (Très arbitrairement 2 fois le nombre de CPU, il faut que le CPU soit à 100% pour être au top)
  • Augmenter la taille des paquets reçus (par défaut c’est 4095) à 32767.

DataSourceConnection

Quelques spécificités au modèle tabulaire :

  • Réduire la précision pour profiter au mieux du moteur Vertipaq (passer de 1.256.324€ à 1.256K€ par exemple). Cela permet d’avoir plus de chance d’avoir les mêmes valeurs et donc d’augmenter la compression et les performances.
  • Découpé une colonne avec plusieurs cardinalités (Une adresse IP 127.0.0.1 peut être découpé en 4 colonnes)
  • Le parallélisme est IMPOSSIBLE sur une même table (même partitionné). Il est donc vivement conseillé de paralléliser les traitements en traitant plusieurs tables en même temps.

Les paramètres d’instance permettent d’avoir un gain plus ou moins important, mais il faut bien souvent faire des tests pour arriver au bon paramétrage :

  • Vertipaq \ ProcessingTimeBoxSecPerMRow : Par défaut 10 secondes. Il est conseillé d’augmenter ce paramètre lorsque l’on possède beaucoup de colonnes (>200).
  • Vertipaq \ DefaultSegmentRowCount : Par défaut 8M lignes. La valeur doit être un multiple de 2. Lorsque l’on augmente, le process est plus long, mais les requêtes plus rapides. Inversement lorsque l’on réduit ce chiffre.

En fonction de la puissance de votre Dataware, il est possible de déporter certaines formules simples au lieu d’avoir des colonnes calculées. Si un cube tabulaire volumineux est partitionné, le gain de temps sera considérable car le recalcul se fera uniquement sur les partitions touchées et non sur tout le cube lors de colonnes calculées.

Voilà pour les quelques trucs et astuces qui pourront faire gagner un peu de temps tous les jours !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *