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.
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. #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
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. #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. #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. #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. #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
14. #JSS2014
… la solution lorsque le partitionnement et les agrégations ne
suffisent plus ?
Les Matrices de compression …
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. #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. #JSS2014
1. Estimer les gains
2. Modification du DataWarehouse
3. Modification du Cube
4. Implémentation dans l’ETL
Un processus en 4 étapes
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. #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
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. #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)