SlideShare ist ein Scribd-Unternehmen logo
1 von 27
#JSS2014
Les journées
SQL Server 2014
Un événement organisé par GUSS
#JSS2014
Les journées
SQL Server 2014
Un événement organisé par GUSS
Optimisation many-to-many SSAS
Ricquebourg Thomas
Sauget Charles-Henri
#JSS2014
Merci à nos sponsors
#JSS2014
Thomas Ricquebourg
Développeur BI
Charles-Henri Sauget
Consultant Décisionnel depuis 2009
Qui sommes-nous
www.sarenza.com
#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
#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
#JSS2014
Modèle de données
DimPost
DimPostType
DimUser
DimBadge
DimDate
DimComment
FactPost
FactCommentFactBadge
#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
#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
#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
#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
#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
#JSS2014
Récap
2013 20142012
Agrégation∑
CacheCache Warming
#JSS2014
… la solution lorsque le partitionnement et les agrégations ne
suffisent plus ?
Les Matrices de compression …
#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
#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
#JSS2014
1. Estimer les gains
2. Modification du DataWarehouse
3. Modification du Cube
4. Implémentation dans l’ETL
Un processus en 4 étapes
#JSS2014
BIDS Helper est là pour vous aider Ou en SQL
Estimation des gains (1/4)
#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
#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
#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
... … …
#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
#JSS2014
Modification du Cube – MD (3/4)
#JSS2014
Modification du Cube – TABULAR (3/4)
Ajouter une mesure calculée de FactComment
M2M Matrix :=
CALCULATE (
[COUNT Comment];
SUMMARIZE (
FactBadgeMatrix;
DimBadgeMatrixSha256[BadgeMatrixId]
)
)
#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)
#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
#JSS2014#JSS2014

Weitere ähnliche Inhalte

Ähnlich wie JSS2014 – Optimisation many-to-many SSAS

JSS2015 - Keynote jour 1
JSS2015 - Keynote jour 1JSS2015 - Keynote jour 1
JSS2015 - Keynote jour 1GUSS
 
Big Data by Soft Computing - Lille
Big Data by Soft Computing - LilleBig Data by Soft Computing - Lille
Big Data by Soft Computing - LilleSoft Computing
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
 
modèle de scoring pour la clientèle
modèle de scoring pour la clientèle modèle de scoring pour la clientèle
modèle de scoring pour la clientèle Oulaya CHOUAY
 
Tests de caractérisation : à l’assaut de votre code "Legacy" patrimonial [FR]
Tests de caractérisation : à l’assaut de votre code "Legacy" patrimonial [FR]Tests de caractérisation : à l’assaut de votre code "Legacy" patrimonial [FR]
Tests de caractérisation : à l’assaut de votre code "Legacy" patrimonial [FR]Elapse Technologies
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013Romain Linsolas
 
Maximisez les bénéfices de votre BI self-service avec la Data Virtualization
Maximisez les bénéfices de votre BI self-service avec la Data VirtualizationMaximisez les bénéfices de votre BI self-service avec la Data Virtualization
Maximisez les bénéfices de votre BI self-service avec la Data VirtualizationDenodo
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Julien Jakubowski
 
Conception de code javascript cote client dans la continuité du renouveau du web
Conception de code javascript cote client dans la continuité du renouveau du webConception de code javascript cote client dans la continuité du renouveau du web
Conception de code javascript cote client dans la continuité du renouveau du webSOAT
 
Présentation welcom la webperf by object23
Présentation welcom la webperf by object23Présentation welcom la webperf by object23
Présentation welcom la webperf by object23Brigitte Marandon
 
Jss 2015 Stream Analytics
Jss 2015   Stream AnalyticsJss 2015   Stream Analytics
Jss 2015 Stream AnalyticsMichel HUBERT
 
[JSS2015] Architectures Lambda avec Azure Stream Analytics
[JSS2015] Architectures Lambda avec Azure Stream Analytics [JSS2015] Architectures Lambda avec Azure Stream Analytics
[JSS2015] Architectures Lambda avec Azure Stream Analytics GUSS
 
Jss 2015 - Microsoft Stream analytics
Jss 2015 -  Microsoft Stream analyticsJss 2015 -  Microsoft Stream analytics
Jss 2015 - Microsoft Stream analyticsGeorges Damien
 
Catalogue formation Autodesk Robot Structural Analysis
Catalogue formation Autodesk Robot Structural AnalysisCatalogue formation Autodesk Robot Structural Analysis
Catalogue formation Autodesk Robot Structural AnalysisFrancois PEDEBOSCQ
 
Réalisez le potentiel des données cross canal qui vous entourent
Réalisez le potentiel des données cross canal qui vous entourentRéalisez le potentiel des données cross canal qui vous entourent
Réalisez le potentiel des données cross canal qui vous entourentMicrosoft Ideas
 
Réalisez le potentiel des données cross canal qui vous entourent
Réalisez le potentiel des données cross canal qui vous entourentRéalisez le potentiel des données cross canal qui vous entourent
Réalisez le potentiel des données cross canal qui vous entourentMicrosoft Ideas
 
Cours Google Analytics - IUT Vannes (février 2014)
Cours Google Analytics - IUT Vannes (février 2014)Cours Google Analytics - IUT Vannes (février 2014)
Cours Google Analytics - IUT Vannes (février 2014)Redpoint
 
Voodoo.io NodeJS Meetup - November 13
Voodoo.io NodeJS Meetup - November 13Voodoo.io NodeJS Meetup - November 13
Voodoo.io NodeJS Meetup - November 13Aymeric Roffé
 

Ähnlich wie JSS2014 – Optimisation many-to-many SSAS (20)

JSS2015 - Keynote jour 1
JSS2015 - Keynote jour 1JSS2015 - Keynote jour 1
JSS2015 - Keynote jour 1
 
Big Data by Soft Computing - Lille
Big Data by Soft Computing - LilleBig Data by Soft Computing - Lille
Big Data by Soft Computing - Lille
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
modèle de scoring pour la clientèle
modèle de scoring pour la clientèle modèle de scoring pour la clientèle
modèle de scoring pour la clientèle
 
Tests de caractérisation : à l’assaut de votre code "Legacy" patrimonial [FR]
Tests de caractérisation : à l’assaut de votre code "Legacy" patrimonial [FR]Tests de caractérisation : à l’assaut de votre code "Legacy" patrimonial [FR]
Tests de caractérisation : à l’assaut de votre code "Legacy" patrimonial [FR]
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013
 
Maximisez les bénéfices de votre BI self-service avec la Data Virtualization
Maximisez les bénéfices de votre BI self-service avec la Data VirtualizationMaximisez les bénéfices de votre BI self-service avec la Data Virtualization
Maximisez les bénéfices de votre BI self-service avec la Data Virtualization
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
 
Conception de code javascript cote client dans la continuité du renouveau du web
Conception de code javascript cote client dans la continuité du renouveau du webConception de code javascript cote client dans la continuité du renouveau du web
Conception de code javascript cote client dans la continuité du renouveau du web
 
Présentation welcom la webperf by object23
Présentation welcom la webperf by object23Présentation welcom la webperf by object23
Présentation welcom la webperf by object23
 
Jss 2015 Stream Analytics
Jss 2015   Stream AnalyticsJss 2015   Stream Analytics
Jss 2015 Stream Analytics
 
[JSS2015] Architectures Lambda avec Azure Stream Analytics
[JSS2015] Architectures Lambda avec Azure Stream Analytics [JSS2015] Architectures Lambda avec Azure Stream Analytics
[JSS2015] Architectures Lambda avec Azure Stream Analytics
 
Jss 2015 - Microsoft Stream analytics
Jss 2015 -  Microsoft Stream analyticsJss 2015 -  Microsoft Stream analytics
Jss 2015 - Microsoft Stream analytics
 
Catalogue formation Autodesk Robot Structural Analysis
Catalogue formation Autodesk Robot Structural AnalysisCatalogue formation Autodesk Robot Structural Analysis
Catalogue formation Autodesk Robot Structural Analysis
 
Réalisez le potentiel des données cross canal qui vous entourent
Réalisez le potentiel des données cross canal qui vous entourentRéalisez le potentiel des données cross canal qui vous entourent
Réalisez le potentiel des données cross canal qui vous entourent
 
Réalisez le potentiel des données cross canal qui vous entourent
Réalisez le potentiel des données cross canal qui vous entourentRéalisez le potentiel des données cross canal qui vous entourent
Réalisez le potentiel des données cross canal qui vous entourent
 
Cours Google Analytics - IUT Vannes (février 2014)
Cours Google Analytics - IUT Vannes (février 2014)Cours Google Analytics - IUT Vannes (février 2014)
Cours Google Analytics - IUT Vannes (février 2014)
 
Voodoo.io NodeJS Meetup - November 13
Voodoo.io NodeJS Meetup - November 13Voodoo.io NodeJS Meetup - November 13
Voodoo.io NodeJS Meetup - November 13
 
Mongo db with C#
Mongo db with C#Mongo db with C#
Mongo db with C#
 
Html 5(1)
Html 5(1)Html 5(1)
Html 5(1)
 

Mehr von GUSS

GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS
 
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)GUSS
 
JSS2015 - Machine Learning like a boss
JSS2015 - Machine Learning like a bossJSS2015 - Machine Learning like a boss
JSS2015 - Machine Learning like a bossGUSS
 
GUSS - CRITEO Meetup Scale SQL for the Web
GUSS - CRITEO Meetup Scale SQL for the WebGUSS - CRITEO Meetup Scale SQL for the Web
GUSS - CRITEO Meetup Scale SQL for the WebGUSS
 
JSS2015 - Keynote jour 2
JSS2015 - Keynote jour 2JSS2015 - Keynote jour 2
JSS2015 - Keynote jour 2GUSS
 
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data LakeGUSS
 
[JSS2015] Power BI Dev
[JSS2015] Power BI Dev[JSS2015] Power BI Dev
[JSS2015] Power BI DevGUSS
 
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch TablesGUSS
 
[JSS2015] Query Store
[JSS2015] Query Store[JSS2015] Query Store
[JSS2015] Query StoreGUSS
 
[JSS2015] 3 DMV's pour evaluer les indexs
[JSS2015] 3 DMV's pour evaluer les indexs[JSS2015] 3 DMV's pour evaluer les indexs
[JSS2015] 3 DMV's pour evaluer les indexsGUSS
 
[JSS2015] Power BI: Nouveautés archi et hybrides
[JSS2015] Power BI: Nouveautés archi et hybrides[JSS2015] Power BI: Nouveautés archi et hybrides
[JSS2015] Power BI: Nouveautés archi et hybridesGUSS
 
[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale out[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale outGUSS
 
[JSS2015] In memory and operational analytics
[JSS2015] In memory and operational analytics[JSS2015] In memory and operational analytics
[JSS2015] In memory and operational analyticsGUSS
 
[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocks[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocksGUSS
 
[JSS2015] - Azure automation
[JSS2015] - Azure automation[JSS2015] - Azure automation
[JSS2015] - Azure automationGUSS
 
[JSS2015] AlwaysOn 2016
[JSS2015] AlwaysOn 2016[JSS2015] AlwaysOn 2016
[JSS2015] AlwaysOn 2016GUSS
 
[JSS2015] - Document db et nosql
[JSS2015] - Document db et nosql[JSS2015] - Document db et nosql
[JSS2015] - Document db et nosqlGUSS
 
[JSS2015] x events
[JSS2015] x events[JSS2015] x events
[JSS2015] x eventsGUSS
 
[JSS2015] Nouveautés SSIS SSRS 2016
[JSS2015] Nouveautés SSIS SSRS 2016[JSS2015] Nouveautés SSIS SSRS 2016
[JSS2015] Nouveautés SSIS SSRS 2016GUSS
 
JSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big DataJSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big DataGUSS
 

Mehr von GUSS (20)

GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
 
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)
 
JSS2015 - Machine Learning like a boss
JSS2015 - Machine Learning like a bossJSS2015 - Machine Learning like a boss
JSS2015 - Machine Learning like a boss
 
GUSS - CRITEO Meetup Scale SQL for the Web
GUSS - CRITEO Meetup Scale SQL for the WebGUSS - CRITEO Meetup Scale SQL for the Web
GUSS - CRITEO Meetup Scale SQL for the Web
 
JSS2015 - Keynote jour 2
JSS2015 - Keynote jour 2JSS2015 - Keynote jour 2
JSS2015 - Keynote jour 2
 
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
 
[JSS2015] Power BI Dev
[JSS2015] Power BI Dev[JSS2015] Power BI Dev
[JSS2015] Power BI Dev
 
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
 
[JSS2015] Query Store
[JSS2015] Query Store[JSS2015] Query Store
[JSS2015] Query Store
 
[JSS2015] 3 DMV's pour evaluer les indexs
[JSS2015] 3 DMV's pour evaluer les indexs[JSS2015] 3 DMV's pour evaluer les indexs
[JSS2015] 3 DMV's pour evaluer les indexs
 
[JSS2015] Power BI: Nouveautés archi et hybrides
[JSS2015] Power BI: Nouveautés archi et hybrides[JSS2015] Power BI: Nouveautés archi et hybrides
[JSS2015] Power BI: Nouveautés archi et hybrides
 
[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale out[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale out
 
[JSS2015] In memory and operational analytics
[JSS2015] In memory and operational analytics[JSS2015] In memory and operational analytics
[JSS2015] In memory and operational analytics
 
[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocks[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocks
 
[JSS2015] - Azure automation
[JSS2015] - Azure automation[JSS2015] - Azure automation
[JSS2015] - Azure automation
 
[JSS2015] AlwaysOn 2016
[JSS2015] AlwaysOn 2016[JSS2015] AlwaysOn 2016
[JSS2015] AlwaysOn 2016
 
[JSS2015] - Document db et nosql
[JSS2015] - Document db et nosql[JSS2015] - Document db et nosql
[JSS2015] - Document db et nosql
 
[JSS2015] x events
[JSS2015] x events[JSS2015] x events
[JSS2015] x events
 
[JSS2015] Nouveautés SSIS SSRS 2016
[JSS2015] Nouveautés SSIS SSRS 2016[JSS2015] Nouveautés SSIS SSRS 2016
[JSS2015] Nouveautés SSIS SSRS 2016
 
JSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big DataJSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big Data
 

Kürzlich hochgeladen

Bidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from TransformersBidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from Transformersbahija babzine
 
Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023France Travail
 
To_understand_transformers_together presentation
To_understand_transformers_together presentationTo_understand_transformers_together presentation
To_understand_transformers_together presentationbahija babzine
 
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel AttalELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attalcontact Elabe
 
Recurrent neural network_PresentationRNN.pptx
Recurrent neural network_PresentationRNN.pptxRecurrent neural network_PresentationRNN.pptx
Recurrent neural network_PresentationRNN.pptxbahija babzine
 
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...France Travail
 

Kürzlich hochgeladen (6)

Bidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from TransformersBidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from Transformers
 
Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023
 
To_understand_transformers_together presentation
To_understand_transformers_together presentationTo_understand_transformers_together presentation
To_understand_transformers_together presentation
 
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel AttalELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
 
Recurrent neural network_PresentationRNN.pptx
Recurrent neural network_PresentationRNN.pptxRecurrent neural network_PresentationRNN.pptx
Recurrent neural network_PresentationRNN.pptx
 
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
 

JSS2014 – Optimisation many-to-many SSAS

  • 1. #JSS2014 Les journées SQL Server 2014 Un événement organisé par GUSS
  • 2. #JSS2014 Les journées SQL Server 2014 Un événement organisé par GUSS Optimisation many-to-many SSAS Ricquebourg Thomas Sauget Charles-Henri
  • 4. #JSS2014 Thomas Ricquebourg Développeur BI Charles-Henri Sauget Consultant Décisionnel depuis 2009 Qui sommes-nous www.sarenza.com
  • 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
  • 18. #JSS2014 BIDS Helper est là pour vous aider Ou en SQL Estimation des gains (1/4)
  • 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. #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. #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)
  • 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

Hinweis der Redaktion

  1. 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
  2. 10 ^ 17 = 100 000 000 000 000 000