JSS2014 – Optimisation many-to-many SSAS

390 vues

Publié le

Session des Journées SQL Server 2014 - Charles-Henri Sauget
---
Avec l’arrivée de Tabulaire et de sa non gestion native des M2M il est d’autant plus important d’avoir des solutions afin d’optimiser ces relations. A travers les matrices de compression nous allons voir une manière efficace de réduire le volume de celles-ci et donc de gagner en performance.

Publié dans : Données & analyses
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
390
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • Dire : Voila comment ça se passe quand on fait une requete à SSAS ,
    Le temps de réponse de SSA du niveau de traitement CACHE , Agrégation et Partition
  • 10 ^ 17 = 100 000 000 000 000 000
  • JSS2014 – Optimisation many-to-many SSAS

    1. 1. #JSS2014 Les journées SQL Server 2014 Un événement organisé par GUSS
    2. 2. #JSS2014 Les journées SQL Server 2014 Un événement organisé par GUSS Optimisation many-to-many SSAS Ricquebourg Thomas Sauget Charles-Henri
    3. 3. #JSS2014 Merci à nos sponsors
    4. 4. #JSS2014 Thomas Ricquebourg Développeur BI Charles-Henri Sauget Consultant Décisionnel depuis 2009 Qui sommes-nous www.sarenza.com
    5. 5. #JSS2014 Tour d’horizon des axes d’optimisation des M2M – Partitionnement – Agrégations Les matrices de compression en détails – Présentation du fonctionnement – Utilisation de BIDS Helper – Démonstrations Agenda
    6. 6. #JSS2014 Exemple – Des raisons d’achat et des achats – Des personnes et des comptes bancaires Gestions SSAS – Multi dim : Native – Tabulaire : Non Native Rappel des M2M
    7. 7. #JSS2014 Modèle de données DimPost DimPostType DimUser DimBadge DimDate DimComment FactPost FactCommentFactBadge
    8. 8. #JSS2014 Croiser badge et commentaire – Connaitre le score et nombre de commentaires par badge Gérer les relations – Faire attention à ne pas sommer n’importe comment Performance et optimisation – Avoir un temps de réponse minimum Ce que l’on souhaite
    9. 9. #JSS2014 Par défaut 1 groupe de mesure = 1 partition Découpage d’un groupe de mesure – Par années – Par pays Application d’une clause WHERE Processing et requête plus rapides – Parallélisme – Scanne moins de données Les partitions
    10. 10. #JSS2014 Meilleure flexibilité – Partitions SSAS = Partitions SQL – Gestion de la dernière partition – Moins de 1000 partitions Script XMLA – Création de partition plus simple Alerte SSDT partition par défaut Supérieur à 20 millions de lignes ou +250 Mo Définir une agrégation Règles de base Pas de chevauchement, pas de “trous” 5 à 20 millions de lignes et 3 Go Une large partition mieux que plusieurs petites Les partitions : Bonnes pratiques Gestion Optimisation
    11. 11. #JSS2014 Précalculs – Des résultats de requêtes en avance : GROUP BY Fonctionne sur des partitions Trois façons de faire – Assistant classique : Manuel, Semi-Manuel – Usage Based Optimization : automatique SSAS tabulaire : pas d’aggregation possible ! Les agrégations
    12. 12. #JSS2014 Méthode – Semi manuelle : Unrestricted – Gain de performance : 20% à 30 % Pourquoi pas 100 % ? – Temps de process important – Espace disque Nombre d’agrégations – 50 à 100 Les agrégations : Bonnes pratiques
    13. 13. #JSS2014 Récap 2013 20142012 Agrégation∑ CacheCache Warming
    14. 14. #JSS2014 … la solution lorsque le partitionnement et les agrégations ne suffisent plus ? Les Matrices de compression …
    15. 15. #JSS2014 SELECT * FROM [dw].[DimComment] DC INNER JOIN [dw].[FactComment] FC ON DC.CommentId = FC.CommentId INNER JOIN [dw].[FactBadge] FB ON FB.UserId = FC.UserId INNER JOIN [dw].[DimBadge] DB ON DB.BadgeId = FB.BadgeId DimBadge DimComment FactCommentFactBadge DimUser CommentId CommentText CommentId2 PostId UserId Score CreationDateIdBadgeId DateId BadgeName 27829001 A very good question. It would be quite reasonable for ghc to have a flag to tell it specialise everything to monomorphic instances. Contrary to wha27829001 18854866 649287 9 20130917 8406401 20110526 Disciplined 27829001 A very good question. It would be quite reasonable for ghc to have a flag to tell it specialise everything to monomorphic instances. Contrary to wha27829001 18854866 649287 9 20130917 8405394 20110514 Mortarboard 27829001 A very good question. It would be quite reasonable for ghc to have a flag to tell it specialise everything to monomorphic instances. Contrary to wha27829001 18854866 649287 9 20130917 8405430 20110726 Pundit 27829001 A very good question. It would be quite reasonable for ghc to have a flag to tell it specialise everything to monomorphic instances. Contrary to wha27829001 18854866 649287 9 20130917 8406723 20131002 Populist 27829001 A very good question. It would be quite reasonable for ghc to have a flag to tell it specialise everything to monomorphic instances. Contrary to wha27829001 18854866 649287 9 20130917 8405532 20110322 Critic Axe d’analyse commun Plusieurs Badges pour un Commentaire 90LignesL’approche SQL
    16. 16. #JSS2014 Les M2M sont contre- performantes car leur résolution passe par le parcours de très nombreuses lignes (9M dans notre exemple) OBJECTIF : Réduire le nombre de lignes ! Matrice de compression1Ligne FactBadge - Matrix DimBadge - Matrix CommentId CommentText CommentId2 PostId UserId Score CreationDateIdBadgeId 27829001 A very good question. It would be quite reasonable for ghc to have a flag to tell it specialise everything to monomorphic instances. Contrary to w27829001 18854866 649287 9 20130917 8406401 8405394 8405430 8406723 8405532 DimBadge DimComment FactCommentFactBadge DimUser
    17. 17. #JSS2014 1. Estimer les gains 2. Modification du DataWarehouse 3. Modification du Cube 4. Implémentation dans l’ETL Un processus en 4 étapes
    18. 18. #JSS2014 BIDS Helper est là pour vous aider Ou en SQL Estimation des gains (1/4)
    19. 19. #JSS2014 2 tables à créer • DimBadgeMatrix – BadgeMatrixId – MatrixList • FactBadgeMatrix – BadgeMatrixId – UserId 1 colonne à ajouter – BadgeMatrixId dans la table FactComment Modification du DataWarehouse (2/4) FactBadge - Matrix DimBadge - Matrix DimBadge DimComment FactCommentFactBadge DimUser 9 379 497 3 012 850
    20. 20. #JSS2014 Modification du DataWarehouse (2/4) UserId BadgeId 174601 8405302 174601 8405503 174601 8405911 480508 8405302 480508 8405503 480508 8405911 1242613 8405302 1242613 8405503 1242613 8405911 548951 8405434 548951 8407608 551176 8405434 551176 8407608 600833 8405434 600833 8407608 1390226 8405434 1390226 8407608 BadgeMatrixId 2 2 2 2 1 1 FactBadge (Table intermédiaire initiale) BadgeMatrixId BadgeId 1 8405302 1 8405503 1 8405911 2 8405434 2 8407608 FactBadgeMatrix (Table intermédiaire compressée) CommentId UserId BadgeMatrixId 33211 174601 1 87722 480508 1 33211 1242613 1 64432 548951 2 11234 600833 2 22245 1390226 2 FactComment BadgeMatrixId BadgeMatrixKey 1 8405302 8405503 8405911 2 8405434 8407608 DimBadgeMatrix (Table contenant les Badges en lignes) Intégration de BadgeMatrixId dans FactComment1
    21. 21. #JSS2014 La taille de la colonne BadgeMatrixKey va devenir un problème à gérer. Il n’est pas envisageable de passer BadgeMatrixKey en VARBINARY(MAX) or nous allons très vite dépasser les 8000 caractères maximum d’un varchar(max) Modification du DataWarehouse (2/4) BadgeMatrixId BadgeMatrixKey 1 8405302 8405503 8405911 2 8405434 8407608 DimBadgeMatrix (Table contenant les Badges en lignes) BadgeMatrixId BadgeMatrixKey 1 8405342 8405503 8405544 8405929 8406045 8406209 8406407 8406853 8407017 8407250 8407629 8407693 ... … …
    22. 22. #JSS2014 Les fonctions de hachage sont là pour nous aider On nomme fonction de hachage une fonction particulière qui, à partir d'une donnée fournie en entrée, calcule une empreinte servant à identifier rapidement, bien qu'incomplètement, la donnée initiale. Les fonctions de hachage sont utilisées en informatique et en cryptographie. Modification du DataWarehouse (2/4) Attention à bien estimer les chances de collisions http://preshing.com/20110504/hash-collision-probabilities/ BadgeMatrixId BadgeMatrixKey BadgeMatrixKeySha256 1 8405342 8405503 8405544 8405929 8406045 8406209 8406407 8406853 8407017 8407250 8407629 8407693 ... … … c8b6d830599ecc173d134bece e516d716c6e4f7f89641a54eda 5c4a405c34369 2 8405342 8405503 568664683a825cdfa291fa96e1 d31205cac2634524e0bf5037c1 d5aa106e624f
    23. 23. #JSS2014 Modification du Cube – MD (3/4)
    24. 24. #JSS2014 Modification du Cube – TABULAR (3/4) Ajouter une mesure calculée de FactComment M2M Matrix := CALCULATE ( [COUNT Comment]; SUMMARIZE ( FactBadgeMatrix; DimBadgeMatrixSha256[BadgeMatrixId] ) )
    25. 25. #JSS2014 L’ETL doit : • Alimenter DimBadgeMatrix • Alimenter FactBadgeMatrix • Mettre à jour la table FactComment • Si votre liste d’identifiants dépasse 8000 caractères, l’ETL doit gérer le Hachage de la colonne. Modification ETL (4/4)
    26. 26. #JSS2014 M2M 16 +0% 482 +0% M2M + Aggreg 2 -88% 525 +8% M2M Matrix 12 -25% 508 +5% M2M Matrix + Aggreg 1 -94% 520 +7% M2M 21 +0% 765 +0% 1020 +0% M2M Matrix 6 -71% 762 -0% 1662 +63% MultidimTabular Requête Processing ETL 1020 1662 +0% +63% Conclusion Requête ProcessingETL TABULAR - Temps par scénario M2M M2M Matrix Requête ProcessingETL MULTIDIM - Temps par scénario M2M M2M + Aggreg M2M Matrix M2M Matrix + Aggreg
    27. 27. #JSS2014#JSS2014

    ×