SlideShare uma empresa Scribd logo
1 de 20
Les journées

SQL Server 2013

Un événement organisé par GUSS

#JSS2013
Les journées

SQL Server 2013

Statistiques

Christophe LAPORTE

Un événement organisé par GUSS

#JSS2013
Christophe LAPORTE
~ depuis 1997

6.5 <= SQL Server <= 2012

christophe_laporte@hotmail.fr
http://conseilit.wordpress.com/

@conseilit

#JSS2013
Merci à nos sponsors

#JSS2013
Agenda
• 11 démos pour comprendre les statistiques
• Q/R (s’il reste du temps)

#JSS2013
F5 – et la magie opère
• Schématiquement, la requête est
– Compilée (parsing / algébrisation / optimisation)
– Le plan d'exécution est mise en cache
– La requête est exécutée

• Démo 1 : plan d’exécution

#JSS2013
Pas de la magie : des statistiques
•
•
•
•

Informations générales
Densité
Histogramme
Démo 2 : montre-moi une statistique

#JSS2013
Et ça fonctionne
• Plutôt bien
• Enfin pas tout le temps !
• Démo 3 : parameter sniffing

#JSS2013
CHECKPOINT - on se pose pour faire un point
• Fonctionne bien pour requête ad-hoc
• Malgré le problème de parameter sniffing
• Les statistiques sont utiles pour créer un
"bon" plan d'exécution

#JSS2013
Que se passe t'il en l’absence de
statistiques

• Par défaut, si besoin de statistiques
– SQL Server va en générer

• Démo 4 :
– Paramètre AUTO_CREATE_STATISTICS

• Pas un bon plan
– dans tous les sens du terme !

#JSS2013
Les statistiques auto générées
• Démo 5 : les statistiques auto générées
• Donc on conserve actif le paramètre
AUTO_CREATE_STATISTICS

#JSS2013
Le problème des statistiques (1)
• L’histogramme …
• Quand ?

– Nombre important de lignes dans table
– Nombreuses valeurs distinctes sur une colonne

• 200 valeurs + NULL

– Problème de précision
– Problème de distribution
– Démo 6

• Fonctionne bien

– si distribution homogène
#JSS2013
Le problème des statistiques (2)
• La mise à jour des données
– Démo 7

• Mise à jour des statistiques
– Seuil : 20% + 500
– Rebuild Index
– Mise à jour manuelle des statistiques

• Autre solution : Trace flag 2371
– Démo 8
#JSS2013
TF 2371

#JSS2013
Le problème des statistiques (3)
• Les nouvelles données
– Les statistiques se basent sur les données connues
– Estimer le nombre d’enregistrements hors plage
• < à la valeur minimale
• > à la valeur maximale

• Démo 9

#JSS2013
Le problème des statistiques (4)
• Présence de statistiques auto générées
–
–
–
–

Peut être un index manquant
Je créé l'index ! (merci de ne pas généraliser …)
Mais la statistique auto générée reste
Démo 10

• Veiller à ne pas avoir de doublons
– Index <-> statistique auto générée
– Consomme des ressources lors de la mise à jour
#JSS2013
Quelques solutions
• Udate stats + fréquents

– Attention aux statistiques auto générées
– Scripts de type Ola Hallengren

• statistiques filtrées

– Mais attention !
• Si données s’étendent sur plusieurs intervalles
• Démo 11

• Plan guides

– Attention : en optimisation, tout peut changer

• SQL 2014

– Nouveau Cost Estimator
– Statistiques incrémentales (tables partitionnées)
#JSS2013
Récapitulatif
• Le plan d'exécution est dépendant des statistiques
• Des statistiques à jour sont donc nécessaires
• Si l'on peut "sniffer" la valeur d'un paramètre

– l'estimation provient de l'histogramme
– Estimation relativement précise
– Si le plan est sauvegardé, cette valeur sera utilisée pour les prochaines exécutions
(Procédures stockées)

• Si l'on ne peut pas "sniffer" le paramètre

l'estimation provient de la densité
Estimation basée sur une "moyenne"
Le plan généré convient à la majorité des valeurs distinctes
Suivant les cas, ce sera aussi performant, ou moins performant qu'une estimation issue
d'un histogramme
– Si le plan est sauvegardé, aucune valeur spécifique n'est liée au plan
– Fonctionne plutôt bien lorsque la dispersion des données est homogène
–
–
–
–

#JSS2013
Questions / Réponses
Merci à tous pour votre présence.

#JSS2013
#JSS2013
#JSS2013

Mais conteúdo relacionado

Destaque

Serveurs core et virtualisation
Serveurs core et virtualisationServeurs core et virtualisation
Serveurs core et virtualisationChristophe Laporte
 
[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocks[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocksGUSS
 
Tune my Code! Code-Versionen testen via Edition-Based Redef. - Jérôme Witt, d...
Tune my Code! Code-Versionen testen via Edition-Based Redef. - Jérôme Witt, d...Tune my Code! Code-Versionen testen via Edition-Based Redef. - Jérôme Witt, d...
Tune my Code! Code-Versionen testen via Edition-Based Redef. - Jérôme Witt, d...dbi services
 
Datit207 scénarios hybrides entre sql server et windows azure
Datit207   scénarios hybrides entre sql server et windows azureDatit207   scénarios hybrides entre sql server et windows azure
Datit207 scénarios hybrides entre sql server et windows azureChristophe Laporte
 
[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] - Document db et nosql
[JSS2015] - Document db et nosql[JSS2015] - Document db et nosql
[JSS2015] - Document db et nosqlGUSS
 
Jss2014 performance counters and dmvs
Jss2014   performance counters and dmvsJss2014   performance counters and dmvs
Jss2014 performance counters and dmvsChristophe Laporte
 
JSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéJSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéChristophe Laporte
 
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...dbi services
 
SQL Server sur Azure dans tous ses états !
SQL Server sur Azure dans tous ses états !SQL Server sur Azure dans tous ses états !
SQL Server sur Azure dans tous ses états !Microsoft Décideurs IT
 
Always on les solutions de haute disponibilité avec sql server 2012 (dat302)
Always on les solutions de haute disponibilité avec sql server 2012 (dat302)Always on les solutions de haute disponibilité avec sql server 2012 (dat302)
Always on les solutions de haute disponibilité avec sql server 2012 (dat302)Christophe Laporte
 
[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
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksSlideShare
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShareSlideShare
 

Destaque (18)

Serveurs core et virtualisation
Serveurs core et virtualisationServeurs core et virtualisation
Serveurs core et virtualisation
 
[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocks[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocks
 
JSS2013 : Hekaton
JSS2013 : HekatonJSS2013 : Hekaton
JSS2013 : Hekaton
 
Tune my Code! Code-Versionen testen via Edition-Based Redef. - Jérôme Witt, d...
Tune my Code! Code-Versionen testen via Edition-Based Redef. - Jérôme Witt, d...Tune my Code! Code-Versionen testen via Edition-Based Redef. - Jérôme Witt, d...
Tune my Code! Code-Versionen testen via Edition-Based Redef. - Jérôme Witt, d...
 
Fusion io
Fusion ioFusion io
Fusion io
 
Datit207 scénarios hybrides entre sql server et windows azure
Datit207   scénarios hybrides entre sql server et windows azureDatit207   scénarios hybrides entre sql server et windows azure
Datit207 scénarios hybrides entre sql server et windows azure
 
High performance jss 2012
High performance jss 2012High performance jss 2012
High performance jss 2012
 
[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] - Document db et nosql
[JSS2015] - Document db et nosql[JSS2015] - Document db et nosql
[JSS2015] - Document db et nosql
 
Jss2014 performance counters and dmvs
Jss2014   performance counters and dmvsJss2014   performance counters and dmvs
Jss2014 performance counters and dmvs
 
JSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéJSS2013 : Haute disponibilité
JSS2013 : Haute disponibilité
 
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
 
Haute disponibilité jss2012
Haute disponibilité jss2012Haute disponibilité jss2012
Haute disponibilité jss2012
 
SQL Server sur Azure dans tous ses états !
SQL Server sur Azure dans tous ses états !SQL Server sur Azure dans tous ses états !
SQL Server sur Azure dans tous ses états !
 
Always on les solutions de haute disponibilité avec sql server 2012 (dat302)
Always on les solutions de haute disponibilité avec sql server 2012 (dat302)Always on les solutions de haute disponibilité avec sql server 2012 (dat302)
Always on les solutions de haute disponibilité avec sql server 2012 (dat302)
 
[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
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Semelhante a JSS2013 : Statistiques

Journées SQL Server 3 problèmes de performance
Journées SQL Server 3 problèmes de performanceJournées SQL Server 3 problèmes de performance
Journées SQL Server 3 problèmes de performanceDavid BAFFALEUF
 
SQL Server : Tuning et Troubleshooting
SQL Server : Tuning et TroubleshootingSQL Server : Tuning et Troubleshooting
SQL Server : Tuning et TroubleshootingMicrosoft
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Microsoft
 
JSS2014 – Performances et fausses bonnes idées
JSS2014 – Performances et fausses bonnes idéesJSS2014 – Performances et fausses bonnes idées
JSS2014 – Performances et fausses bonnes idéesGUSS
 
[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 - Keynote jour 1
JSS2015 - Keynote jour 1JSS2015 - Keynote jour 1
JSS2015 - Keynote jour 1GUSS
 
L'IBM i est une plateforme en évolution : innovations de la version 7.3
L'IBM i est une plateforme en évolution : innovations de la version 7.3L'IBM i est une plateforme en évolution : innovations de la version 7.3
L'IBM i est une plateforme en évolution : innovations de la version 7.3Solutions IT et Business
 
JSS2014 – Performances et DMV
JSS2014 – Performances et DMVJSS2014 – Performances et DMV
JSS2014 – Performances et DMVGUSS
 
Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Guillaume Nocent
 
[JSS2015] Query Store
[JSS2015] Query Store[JSS2015] Query Store
[JSS2015] Query StoreGUSS
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerMicrosoft
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jGabriel Pillet 🐙
 
Meetup juin2013
Meetup juin2013Meetup juin2013
Meetup juin2013nperu
 
[POSS 2018] Comment unifier ses dashboards par Grafana
[POSS 2018] Comment unifier ses dashboards par Grafana[POSS 2018] Comment unifier ses dashboards par Grafana
[POSS 2018] Comment unifier ses dashboards par GrafanaWorteks
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Kenny Dits
 
Journées SQL Server - Optimisation SQL Server pour SharePoint
Journées SQL Server - Optimisation SQL Server pour SharePointJournées SQL Server - Optimisation SQL Server pour SharePoint
Journées SQL Server - Optimisation SQL Server pour SharePointBenoit Jester
 
Dans les coulisses de Google BigQuery - DevFest Toulouse 2016
Dans les coulisses de Google BigQuery - DevFest Toulouse 2016Dans les coulisses de Google BigQuery - DevFest Toulouse 2016
Dans les coulisses de Google BigQuery - DevFest Toulouse 2016Aurélie Vache
 
[JSS2015] x events
[JSS2015] x events[JSS2015] x events
[JSS2015] x eventsGUSS
 
Retour d'expérience de Sendinblue sur Logmatic.io, solutions d'analyse de log...
Retour d'expérience de Sendinblue sur Logmatic.io, solutions d'analyse de log...Retour d'expérience de Sendinblue sur Logmatic.io, solutions d'analyse de log...
Retour d'expérience de Sendinblue sur Logmatic.io, solutions d'analyse de log...Le_GFII
 

Semelhante a JSS2013 : Statistiques (20)

Journées SQL Server 3 problèmes de performance
Journées SQL Server 3 problèmes de performanceJournées SQL Server 3 problèmes de performance
Journées SQL Server 3 problèmes de performance
 
SQL Server : Tuning et Troubleshooting
SQL Server : Tuning et TroubleshootingSQL Server : Tuning et Troubleshooting
SQL Server : Tuning et Troubleshooting
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016
 
JSS2014 – Performances et fausses bonnes idées
JSS2014 – Performances et fausses bonnes idéesJSS2014 – Performances et fausses bonnes idées
JSS2014 – Performances et fausses bonnes idées
 
[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 - Keynote jour 1
JSS2015 - Keynote jour 1JSS2015 - Keynote jour 1
JSS2015 - Keynote jour 1
 
L'IBM i est une plateforme en évolution : innovations de la version 7.3
L'IBM i est une plateforme en évolution : innovations de la version 7.3L'IBM i est une plateforme en évolution : innovations de la version 7.3
L'IBM i est une plateforme en évolution : innovations de la version 7.3
 
JSS2014 – Performances et DMV
JSS2014 – Performances et DMVJSS2014 – Performances et DMV
JSS2014 – Performances et DMV
 
Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016
 
[JSS2015] Query Store
[JSS2015] Query Store[JSS2015] Query Store
[JSS2015] Query Store
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL Server
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4j
 
Meetup juin2013
Meetup juin2013Meetup juin2013
Meetup juin2013
 
Presentation Map Reduce
Presentation Map ReducePresentation Map Reduce
Presentation Map Reduce
 
[POSS 2018] Comment unifier ses dashboards par Grafana
[POSS 2018] Comment unifier ses dashboards par Grafana[POSS 2018] Comment unifier ses dashboards par Grafana
[POSS 2018] Comment unifier ses dashboards par Grafana
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?
 
Journées SQL Server - Optimisation SQL Server pour SharePoint
Journées SQL Server - Optimisation SQL Server pour SharePointJournées SQL Server - Optimisation SQL Server pour SharePoint
Journées SQL Server - Optimisation SQL Server pour SharePoint
 
Dans les coulisses de Google BigQuery - DevFest Toulouse 2016
Dans les coulisses de Google BigQuery - DevFest Toulouse 2016Dans les coulisses de Google BigQuery - DevFest Toulouse 2016
Dans les coulisses de Google BigQuery - DevFest Toulouse 2016
 
[JSS2015] x events
[JSS2015] x events[JSS2015] x events
[JSS2015] x events
 
Retour d'expérience de Sendinblue sur Logmatic.io, solutions d'analyse de log...
Retour d'expérience de Sendinblue sur Logmatic.io, solutions d'analyse de log...Retour d'expérience de Sendinblue sur Logmatic.io, solutions d'analyse de log...
Retour d'expérience de Sendinblue sur Logmatic.io, solutions d'analyse de log...
 

JSS2013 : Statistiques

  • 1. Les journées SQL Server 2013 Un événement organisé par GUSS #JSS2013
  • 2. Les journées SQL Server 2013 Statistiques Christophe LAPORTE Un événement organisé par GUSS #JSS2013
  • 3. Christophe LAPORTE ~ depuis 1997 6.5 <= SQL Server <= 2012 christophe_laporte@hotmail.fr http://conseilit.wordpress.com/ @conseilit #JSS2013
  • 4. Merci à nos sponsors #JSS2013
  • 5. Agenda • 11 démos pour comprendre les statistiques • Q/R (s’il reste du temps) #JSS2013
  • 6. F5 – et la magie opère • Schématiquement, la requête est – Compilée (parsing / algébrisation / optimisation) – Le plan d'exécution est mise en cache – La requête est exécutée • Démo 1 : plan d’exécution #JSS2013
  • 7. Pas de la magie : des statistiques • • • • Informations générales Densité Histogramme Démo 2 : montre-moi une statistique #JSS2013
  • 8. Et ça fonctionne • Plutôt bien • Enfin pas tout le temps ! • Démo 3 : parameter sniffing #JSS2013
  • 9. CHECKPOINT - on se pose pour faire un point • Fonctionne bien pour requête ad-hoc • Malgré le problème de parameter sniffing • Les statistiques sont utiles pour créer un "bon" plan d'exécution #JSS2013
  • 10. Que se passe t'il en l’absence de statistiques • Par défaut, si besoin de statistiques – SQL Server va en générer • Démo 4 : – Paramètre AUTO_CREATE_STATISTICS • Pas un bon plan – dans tous les sens du terme ! #JSS2013
  • 11. Les statistiques auto générées • Démo 5 : les statistiques auto générées • Donc on conserve actif le paramètre AUTO_CREATE_STATISTICS #JSS2013
  • 12. Le problème des statistiques (1) • L’histogramme … • Quand ? – Nombre important de lignes dans table – Nombreuses valeurs distinctes sur une colonne • 200 valeurs + NULL – Problème de précision – Problème de distribution – Démo 6 • Fonctionne bien – si distribution homogène #JSS2013
  • 13. Le problème des statistiques (2) • La mise à jour des données – Démo 7 • Mise à jour des statistiques – Seuil : 20% + 500 – Rebuild Index – Mise à jour manuelle des statistiques • Autre solution : Trace flag 2371 – Démo 8 #JSS2013
  • 15. Le problème des statistiques (3) • Les nouvelles données – Les statistiques se basent sur les données connues – Estimer le nombre d’enregistrements hors plage • < à la valeur minimale • > à la valeur maximale • Démo 9 #JSS2013
  • 16. Le problème des statistiques (4) • Présence de statistiques auto générées – – – – Peut être un index manquant Je créé l'index ! (merci de ne pas généraliser …) Mais la statistique auto générée reste Démo 10 • Veiller à ne pas avoir de doublons – Index <-> statistique auto générée – Consomme des ressources lors de la mise à jour #JSS2013
  • 17. Quelques solutions • Udate stats + fréquents – Attention aux statistiques auto générées – Scripts de type Ola Hallengren • statistiques filtrées – Mais attention ! • Si données s’étendent sur plusieurs intervalles • Démo 11 • Plan guides – Attention : en optimisation, tout peut changer • SQL 2014 – Nouveau Cost Estimator – Statistiques incrémentales (tables partitionnées) #JSS2013
  • 18. Récapitulatif • Le plan d'exécution est dépendant des statistiques • Des statistiques à jour sont donc nécessaires • Si l'on peut "sniffer" la valeur d'un paramètre – l'estimation provient de l'histogramme – Estimation relativement précise – Si le plan est sauvegardé, cette valeur sera utilisée pour les prochaines exécutions (Procédures stockées) • Si l'on ne peut pas "sniffer" le paramètre l'estimation provient de la densité Estimation basée sur une "moyenne" Le plan généré convient à la majorité des valeurs distinctes Suivant les cas, ce sera aussi performant, ou moins performant qu'une estimation issue d'un histogramme – Si le plan est sauvegardé, aucune valeur spécifique n'est liée au plan – Fonctionne plutôt bien lorsque la dispersion des données est homogène – – – – #JSS2013
  • 19. Questions / Réponses Merci à tous pour votre présence. #JSS2013