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
- Si beaucoup d’IO sur une table, est-ce qu’on a un index ? (https://youtu.be/BqmaDUumoxk)
 
2. Regarder le temps -> SET STATISTICS TIME ON
- SET STATISTICS IO, TIME ON (https://youtu.be/wThNVZciebQ)
 - Différence entre temps CPU et temps total
 - CPU < temps total => attentes – pas de la faute de la requête – par exemple blocages de verrous, lectures sur le disque, comportement du datareader (https://youtu.be/AbmUxVNF-Pc)
 - CPU > temps total => parallélisme (https://youtu.be/pqaZPhpXt1w) – pas grave
 
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
- Utiliser les évènements étendus en filtrant sur la durée
 - Utiliser les évènements étendus sans filtre un petit moment pour voir s’il y a des requêtes répétitives ou doublonnées.
 - Regarder les statistiques de requête : https://github.com/rudi-bruchez/tsql-scripts/blob/master/diagnostics/execution-stats/dm_exec_query_stats.sql