SQL Server HowTo

Logo

Aide pour opérations administratives, développement et optimisation dans Microsoft SQL Server

View the Project on GitHub rudi-bruchez/sql-server-howto-fr

Comment diagnostiquer les problèmes de performances dans SQL Server

Si votre serveur SQL présente des lenteurs, vous devez absolument recueillir des indices, pour ne pas supposer des problèmes et des solutions qui ne correspondent pas à la nature du problème.

Si vous étiez médecin, prescririez-vous un traitement sans effectuer de diagnostic ?

Hypothèses

D’où peuvent provenir les problèmes de performance ?

  1. D’un serveur mal dimensionné;
  2. D’une mauvaise configuration de SQL Server ou des bases de données;
  3. De requêtes mal écrites qui sont trop longues;
  4. D’allers-retours excessifs entre le client et le serveur;
  5. De blocages dus à trop de verrouillage;
  6. D’exécution de triggers, de transactions trop longues;
  7. D’un manque d’index;
  8. D’attentes, par exemple sur le parallélisme des requêtes;
  9. Du code client, en non pas de SQL Server;
  10. De problèmes de plans d’exécution, de compilation et de parameter sniffing.

Comment vérifier les hypothèses ?

Serveur mal dimensionné

SQL Server peut très bien fonctionner sur une machine moyennement dimensionnée, si la base de données et les requêtes sont optimisées.

Quelques pistes :

Y a-t-il un problème de disque ?

Pour déterminer si les performances des disques sont à blamer, vous pouvez :

Mauvaise configuration de SQL Server ou des bases de données

Pour savoir si la configuration de l’instance est concernée :

Parallélisme

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 1 ;

Configuration des bases

Requêtes mal écrites qui sont trop longues

Allers-retours excessifs entre le client et le serveur

Plus difficile à identifier. Le comportement attendu est un excès de petites requêtes répétitives, qui exécutent des allers-retours unitaires entre le client et le serveur, au lieu de requêtes ensemblistes. C’est un comportement à changer dans le code client.

Blocages dus à trop de verrouillage

Les blocages sont des attentes sur des verrous posés par d’autres sessions.

Y a-t-il des blocages ?

Exécution de triggers, de transactions trop longues

Manque d’index

Problèmes de plans d’exécution, de compilation et de parameter sniffing

Lorsque les problèmes se posent, videz le cache de plans à l’aide de la commande suivante : DBCC FREEPROCCACHE. Est-ce que cela résout le problème ? Vous pouvez exécuter cette commande au lieu de redémarrer un serveur SQL.

Vérifiez les statistiques : - requête de diagnostic

Erreur d’estimation de cardinalité

[Besoin de services avec SQL Server ? Contactez-moi]