Analyser les requêtes

Comment analyser les requêtes pour identifier les problèmes de performances. Marche à suivre.

Voici une checklist résumée de la méthodologie pour analyser les performances d’une requête ou d’une base de données SQL Server.

1. Regarder les IO -> SET STATISTICS IO ON

2. Regarder le temps -> SET STATISTICS TIME ON

3. Regarder le plan d’exécution après exécution.

  • Y a-t-il une différence d’estimation de cardinalité ? C’est grave quand il estime trop peu.
  • Utiliser de préférence Plan Explorer – https://www.sentryone.com/plan-explorer
  • Si différence – recalculer les statistiques (https://youtu.be/a-0JJNXdVsw, https://youtu.be/FEZSpL36O_w pour le recalcul dans le plan de maintenance)
  • Ça pourrait être une variable de type table : si oui OPTION (RECOMPILE) ou SQL Server 2017.
  • Ça peut être le moteur d’estimation (CE).
    • Si erreur d’estimation de cardinalité sur une requête complexe, essayer de jouer avec la version du CE.
    • OPTION (USE HINT('FORCE_LEGACY_CARDINALITY_ESTIMATION'))
    • OPTION (USE HINT('ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'))
    • OPTION (USE HINT('FORCE_DEFAULT_CARDINALITY_ESTIMATION'))
    • ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = On;

4. Analyser globalement les performances

Utilisez le Query Store (depuis SQL Server 2016)